【问题标题】:Waiting for Variable Change等待变量变化
【发布时间】:2010-09-29 13:46:31
【问题描述】:

这是我用 Qt 编写的代码 sn-p。

bool myFunc()
{
  .......
  while(!tcpCommunicator->isLoginReplyExist)
  {             
    qApp->processEvents(QEventLoop::AllEvents);
  }
  .......
  return tcpCommunicator->res;
}

在“isLoginReplyExist”被我想退出循环的程序的另一部分更改后,有没有更好的方法来完成这个?

谢谢。

【问题讨论】:

  • isLoginReplyExist 更改为false 时,循环已经终止——您的意思是要中断processEvents 并在发生这种情况时退出循环?
  • 不,我只是想知道有没有更有效的方法来做到这一点?直觉上我实现它的方式在我看来效率低下。
  • 如果你使用单线程,没有别的事情可做,那是没有问题的。如果它不是关键,你可以在你的循环中设置一个睡眠来最小化CPU使用率。

标签: c++ events qt concurrency synchronization


【解决方案1】:

如果 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 类型。

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多