QThreads插槽和信号中断

时间:2013-05-08 13:41:12

标签: c++ multithreading qt qt4 qt-signals

我有一个包含QThread的课程。在该类的初始化函数中,应该启动线程。这是正确的。在线程中,我有while(bool certainCondition){}这个certainCondition应该通过信号/插槽连接进行更改。

问题是在运行过程中,信号/插槽没有打开。

2 个答案:

答案 0 :(得分:3)

您没有在线程中运行事件循环,或者您在while循环中长时间阻塞。在将控制权返回到事件循环之前,无法调用您的插槽,这将在完成while循环后发生。

作为一种解决方法,您可以尝试在while循环中调用QCoreApplication::processEvents()

答案 1 :(得分:1)

为了让信号/插槽跨线程工作,必须运行事件循环 如果使用while循环,则永远不会运行事件循环,因此不会收到信号 这是您正常运行事件循环的方式:

void Thread::run()
{
    ...do something
    exec();  //<<this runs the event loop
}

现在,您的问题是您需要持续运行一些代码,直到满足某些条件。在上面的代码中,由于exec()调用,这不起作用 有两种可能的解决方法(取决于你想在循环中实现的目标):

  1. 使用QTimer,每5秒触发一次,然后调用执行重复代码的插槽。

  2. 使用QWaitCondition检查是否满足某个条件;但是你不能使用信号和插槽;相反,你必须触发QWaitCondition。