我有一个执行以下操作的python函数:
现在,在我启动PyQt QApplication之前,主线程中的time.sleep()可以正常工作,但是在我启动它之后,time.sleep(1)立即返回。
这里是一个例子:
def run_gui_thread(self):
app = QApplication([])
self.prompt = QDialog()
self.ready = True
app.exec_()
和:
def do_work(self):
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
self.thread = threading.Thread(target = self.run_gui_thread)
self.thread.start()
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
time.sleep(1)
print "Now is %s." % time.strftime("%H:%M:%S")
输出:
Now is 10:00:56.
Now is 10:00:57.
Now is 10:00:58.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
Now is 10:00:59.
任何建议?
提前感谢。
最有可能Qt的东西在幕后使用信号(可能包括alarm()
)。按照time.sleep()
doco:
在给定的秒数内暂停当前线程的执行。该参数可以是浮点数,以指示更精确的睡眠时间。 实际的暂停时间可能小于请求的时间,因为任何捕获的信号都会在执行该信号的捕获例程后终止sleep()。]而且,暂停时间可能比请求的时间长任意量由于系统中其他活动的安排。
您最好重新架构应用程序,以便可以改用
QTimer
。
QTimer
的替代值为time.sleep()
: