我正在使用Lua和Qt編寫用戶界面,並且有一個過程可以在以下過程中爲圖片繪製一個矩形。目前我使用io.read()等待矩形由用戶設置,然後按下「CTRL + D」繼續程序。我想知道是否可以通過代碼中斷io.read(),這樣一旦用戶設置了矩形,程序就會自動運行。 更具體地說,這裏是我要做的一個例子。如何在lua中中斷io.read(),充當「等待」功能
function ui_select(x, y)
if x1 == -1 then -- First point of rectangle
x1 = x
y1 = y
else -- Second point of rectangle
x2 = x
y2 = y
io.write(1)
end
end
qt.connect(qt.QtLuaListener(ui.frame_2.canvas), 'sigMousePress(int, int, QByteArray, QByteArray, QByteArray)', ui_select)
x1 = -1
y1 = -1
x2 = 0
y2 = 0
ui.frame_2.can_label.text = 'Draw a rectangle around the object you want to track, finish with "<CTRL> + D"'
io.read()
-- Do something
我想如果我能io.read中斷()在ui_select功能,所以一旦用戶繪製矩形,它會自動啓動處理。
我不能只是把處理代碼放入ui_select函數並刪除io.read(),因爲這是子程序,一旦沒有io.read()等待用戶的操作,它就會運行從頭到尾不做任何事情並返回到主程序。
我不明白你的程序的流程,但是在Unix世界裏有一些叫做FIFO的東西:它是一個可與進程通信的「文件」。這樣做:讀取()該文件將阻塞,直到有可用的輸入(也就是說,直到其他進程寫入某些東西,例如,您的繪圖應用程序可以寫入「準備好矩形\ n」但確保刷新輸出或贏得真的不會被髮送)。 (至於你的「原始」問題:我知道讀(2)可以被信號中斷,你可能想要檢查這個地點。) – 2015-02-11 03:58:17
你能解釋一些關於如何中斷io.read(2) ?它是通過FIFO? – 2015-02-17 19:21:07