我在python中做了类似的事情
class MyThread ( threading.Thread ):
def run (s):
try:
s.wantQuit = 0
while(not s.wantQuit):
button = raw_input()
if button == "q":
s.wantQuit=1
except KeyboardInterrupt:
s.wantQuit = 1
myThread = MyThread ()
myThread.start()
a=5
while not myThread.wantQuit:
print "hey"
if (a == 0):
break;
a = a-1;
time.sleep(1)
#"""
sys.exit()
我的应用程序会锁定5秒钟“嘿”(5次)然后我得到raw_input对话框。如何让对话框显示出来,以便我可以随时退出而不是在循环用完时?
答案 0 :(得分:1)
你的意思是while循环在线程之前运行?好吧,除非你同步它,否则你无法预测。没有人保证线程将在while循环之前或之后运行。但是,如果它被阻挡了5秒钟,那么那个线程应该已经被抢占了。
此外,由于你首次在run()方法中使用了wantToQuit,所以当你在while not myThread.wantToQuit
中检查它的wantToQuit属性时,没有人向你保证线程已经启动。
答案 1 :(得分:1)
这里的行为不是你所描述的。 看看我得到的那些样本输出:
第一:尽可能快地按q<ENTER>
:
hey
q
第二名:在按q<ENTER>
之前稍等一下:
hey
hey
hey
q
第3名:请勿触摸键盘:
hey
hey
hey
hey
hey
hey
# Application locks because main thread is over but
# there are other threads running. add myThread.wantQuit = 1
# to prevent that if you want
答案 2 :(得分:0)
只是尝试了代码以确保,但这确实做了它应该做的...你可以输入q并输入到控制台并使应用程序在a = 0之前退出(所以它说它少了5次)
我不知道raw_input对话框的意思,raw_input通常只从stdin获取信息
答案 3 :(得分:0)
huperboreean有你的答案。执行for循环时,线程仍在启动。
您希望在进入循环之前检查线程是否已启动。 您可以简化线程以监视raw_input,并在输入“q”时返回。这会杀死线程。
你的主循环可以检查线程是否还活着。