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 以获得更多帮助。
我有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 以获得更多帮助。