等待变量变化

时间:2010-09-29 13:46:32

标签: c++ events qt concurrency synchronization

这是我用Qt。

编写的代码片段
bool myFunc()
{
  .......
  while(!tcpCommunicator->isLoginReplyExist)
  {             
    qApp->processEvents(QEventLoop::AllEvents);
  }
  .......
  return tcpCommunicator->res;
}

“isLoginReplyExist”被我希望退出循环的程序的另一部分改变后,有没有更好的方法来实现这个目的?

感谢。

1 个答案:

答案 0 :(得分:2)

如果myFunc()是某个类的方法(例如Class1),则可以从QObject继承此类并定义插槽:

Class1 : public QObject
{
Q_OBJECT
...
public slots:
void mySlot(bool tcpResult);
...
}

更改tcpCommunicator状态(Class2)的对象应该有信号:

Class2 : public QObject
{
Q_OBJECT
...
signals:
void tcpChangedTo(bool);
...
}

最后你应该连接信号和插槽。因此,当更改tcpCommunicator时,将执行mySlot(bool res)。如果Class1和Class2对象在不同的​​线程中工作,则在将信号连接到插槽时应使用Qt :: QueuedConnection类型。