Lua-Love 程序没有像我预期的那样关闭设备

Lua-Love program not closing devices as I expect it to

我有lua恋爱计划:

conf-nogui.lua(在 conf.lua 中调用以不显示 GUI):

function love.conf(t)
  print("Switch GUI window off")
  t.window = nil
end

main.lua:

-- UDP Server
local socket = require("socket")
require("utils")
require("globals")

-- Module Scoped Variables (or as I like to call them local-globals)
local udp

-- Startup
function love.load()
  print("load")
  udp = socket.udp()
  udp:setsockname("*", SERVER_PORT)
  udp:settimeout(0)
  print("load done")
end

-- Scheduler 
function love.update()
  -- Check for Rx packets
  local rxDataPacket, ip, port = udp:receivefrom()
  if rxDataPacket then
    -- print the packet as hex
    printStringAsHex("Rx from " .. ip .. ":" .. port .. " ", rxDataPacket)    
    -- Turn string into an array for editing
    local rxByteArray = stringToArray(rxDataPacket)
    -- Edit values
    rxByteArray[5] = 0x66 
    -- Turn back into string
    local txDataPacket = arrayToString(rxByteArray)  
    -- Reply with the result
    udp:sendto(txDataPacket, ip, port)
  end
end

-- shutdown
function love.quit()
  print("Closing connection...")
  -- done with client, close the object
  udp:close()
  print("connection close done")
end

还有其他一些文件,但我认为对于这个问题来说不是必需的。

我运行命令行上的程序是这样的:love . --console我在正确的目录中所以“。”是当前目录。

这个小程序 运行 在我关闭它之前完全符合预期。它在 windows 命令行上 运行ning,所以我使用 ctrl+c 终止程序(它不是 运行ning GUI - 请参阅 conf 文件)。

当程序关闭时,这是我在命令提示符中看到的:

AL lib: (EE) alc_cleanup: 1 device not closed

所以我不明白的是为什么我的 function love.quit() 没有被调用。我没有看到我的调试 Closing connection...。是不是因为ctrl+C也终止了程序"harshly"? - 还有其他方法可以终止程序吗?

在我看来 love.quit 仅在引发 quit 事件时调用(即 love.event.quit()

当按下 Ctrl+c 时,cmd 会收到一个 SIGINT,这会导致实例中的当前程序 运行 停止。

What technically happens when you press Control-C is that all programs running in the foreground in your current terminal (or virtual terminal) get the signal SIGINT sent.1

所以,我猜 LOVE 捕获了那个输入,并且没有选择引发 quit 事件,而是强行关闭。

查看此 question 以获得更多帮助。