Lua-Love程序关闭设备不像我期望的那样

我有Lua love程序:

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

function love.conf(t)
  print"关闭GUI窗口")
  t.window = nil
end

main.lua:

-- UDP服务器
local socket = require("socket")
require("utils")
require("globals")

--模块范围变量(或者我喜欢叫它们本地全局变量)
local udp

--启动
function love.load()
  print"加载")
  udp = socket.udp()
  udp:setsockname("*",SERVER_PORT)
  udp:settimeout(0)
  print"加载完成")
end

--调度器
function love.update()
  --检查Rx数据包
  local rxDataPacket,ip,port = udp:receivefrom()
  if rxDataPacket then
    --将包打印成十六进制
    printStringAsHex("Rx from ".. ip ..":".. port .." ",rxDataPacket)
    --将字符串转换为数组进行编辑
    local rxByteArray = stringToArray(rxDataPacket)
    --编辑值
    rxByteArray [5] = 0x66
    --再次转换为字符串
    local txDataPacket = arrayToString(rxByteArray)
    --用结果回复
    udp:sendto(txDataPacket,ip,port)
  end
end

--关闭
function love.quit()
  print"关闭连接...")
  --完成客户机,关闭对象
  udp:close()
  print"关闭连接完成")
end

还有一些其他的文件被包括在内,但我不认为对这个问题是必要的。

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

这个小程序正如预期的那样运行,直到我关闭它。它在Windows命令行上运行,所以我使用ctrl+c终止程序(它没有运行GUI-参见conf文件)。

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

“AL lib:(EE)alc_cleanup:1个设备未关闭”

所以我不理解为什么我的“function love.quit()”没有被调用。我没有看到调试的“关闭连接...”。是因为ctrl+C过于“粗暴”地终止程序吗?-还有其他方法终止程序吗?

点赞
用户6509531
用户6509531

我认为 love.quit 只有在触发 quit 事件(即 love.event.quit())时才会被调用。

当按下 Ctrl+C 时,cmd 会收到 SIGINT 信号,导致实例中运行的当前程序停止。

技术上,当你按下 Control-C 时,所有在当前终端(或虚拟终端)前台运行的程序都会收到 SIGINT 信号。1

所以,我猜 LOVE 捕获了这个输入,而没有选择触发 quit 事件,而是强制关闭了。

查看这个问题以获取更多帮助。

2016-08-17 14:05:29