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

时间:2016-08-17 13:39:02

标签: lua love2d termination

我有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命令行上运行,因此我使用ctrl + c来终止程序(它没有运行GUI - 请参阅conf文件)。

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

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

所以我不明白为什么我的function love.quit()没有被调用。我没有看到我的调试Closing connection...。是因为ctrl + C太“严厉”地终止程序了吗? - 还有另一种终止程序的方法吗?

1 个答案:

答案 0 :(得分:1)

在我看来love.quit仅在quit事件被提出时被调用(即love.event.quit()

当按下Ctrl + c时,cmd会被赋予SIGINT,这会导致实例中运行的当前程序停止。

  

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

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

请检查此question以获取更多帮助。