【问题标题】:Lua-Love program not closing devices as I expect it toLua-Love 程序没有像我期望的那样关闭设备
【发布时间】:2016-12-24 05:01:57
【问题描述】:

我有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 终止程序过于“苛刻”吗? - 还有其他方法可以终止程序吗?

【问题讨论】:

    标签: lua love2d termination


    【解决方案1】:

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

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

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

    所以,我猜 LOVE 会捕获该输入,并且不会选择引发 quit 事件,而是强制关闭。

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

    【讨论】:

    • 嗯....该死的,这就是我所担心的。我希望爱情框架能以某种方式处理这个问题。你知道我如何在 lua 中处理 SIGINT 吗?
    • 好的,谢谢 - 我从你的第一篇文章中了解到,我想知道如何处理这个问题,或者如何“正确”结束程序 - 请记住我没有 GUI... .我尝试阅读标准输入,但这似乎是一个阻塞调用,我不希望我的程序阻塞..
    • @code_fodder 据我所知,没有办法,至少不编辑 LOVE 的 C 文件并在遇到 SIGINT 时重写它们的行为。
    • 还不错。这对我来说不是什么大问题,因为它似乎无论如何都会“收集垃圾”:) 感谢您提供信息。
    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多