2016-08-17 12 views
1

У меня есть программа Lua любовь:программа Lua-Love не запорных устройств, как я ожидаю его

конф-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 для завершения работы программы (у нее нет графического интерфейса - см. Файл conf).

Когда программа закрывает это то, что я вижу на в командной строке:

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

Так что я не понимаю, почему мой function love.quit() не называется. Я не вижу своего отладки . Это потому, что ctrl + C слишком сильно завершает программу? - есть ли другой способ прекратить программу?

ответ

1

Мне кажется, что love.quit вызывается только при повышении quit события (т.е. love.event.quit())

Когда Ctrl + C нажат, CMD дается SIGINT, который вызывает текущую программу (ы) работает в экземпляр для остановки.

Что технически происходит при нажатии кнопки Control-C, так это то, что все программы, запущенные на переднем плане в вашем текущем терминале (или виртуальном терминале), получают сигнал SIGINT. 1

Так что, я думаю, ЛЮБОВЬ уловы, что вход, и не выбрать, чтобы поднять quit событие, но принудительно выключается вместо этого.

Проверьте это question для получения дополнительной помощи.

+0

хм .... проклятье, это то, чего я боялся. Я надеялся, что структура любви так или иначе справилась с этим. Вы знаете, как я могу справиться с SIGINT в lua? –

+0

@code_fodder См. Обновленный ответ. –

+0

ОК, спасибо - я понял, что с вашего первого поста, что я хочу знать, как справиться с этим, или как закончить программу «правильно» - имея в виду, что у меня нет GUI ... Я пробовал читать stdin, но это, кажется, блокирующий вызов, и я не хочу, чтобы моя программа блокировалась. –