我有一个包含QThread
的课程。在该类的初始化函数中,应该启动线程。这是正确的。在线程中,我有while(bool certainCondition){}
这个certainCondition
应该通过信号/插槽连接进行更改。
问题是在运行过程中,信号/插槽没有打开。
答案 0 :(得分:3)
您没有在线程中运行事件循环,或者您在while循环中长时间阻塞。在将控制权返回到事件循环之前,无法调用您的插槽,这将在完成while循环后发生。
作为一种解决方法,您可以尝试在while循环中调用QCoreApplication::processEvents()。
答案 1 :(得分:1)
为了让信号/插槽跨线程工作,必须运行事件循环 如果使用while循环,则永远不会运行事件循环,因此不会收到信号 这是您正常运行事件循环的方式:
void Thread::run()
{
...do something
exec(); //<<this runs the event loop
}
现在,您的问题是您需要持续运行一些代码,直到满足某些条件。在上面的代码中,由于exec()
调用,这不起作用
有两种可能的解决方法(取决于你想在循环中实现的目标):
使用QTimer,每5秒触发一次,然后调用执行重复代码的插槽。
使用QWaitCondition检查是否满足某个条件;但是你不能使用信号和插槽;相反,你必须触发QWaitCondition。