我正在使用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