2010-09-29 70 views
1

这里我的代码片段写在Qt中。等待变量变化

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

“isLoginReplyExist”后,通过程序我想从环退出的另一部分改变,有没有更好的方式来做到这一点?

谢谢。

+1

当'isLoginReplyExist'更改为false时,循环已经终止 - 是否意味着当发生这种情况时,您想要中断'processEvents'并退出循环? – 2010-09-29 13:57:29

+0

不,我只是想知道有没有更有效的方法来做到这一点?直觉上我执行的方式对我来说似乎没有效率。 – metdos 2010-09-30 05:28:59

+0

如果您使用单个线程而没有别的事情可做,那不是问题。如果它不是关键的,那么你可以在你的循环中进行睡眠,以最大限度地减少CPU使用率。 – Live 2010-09-30 19:43:01

回答

2

如果myFunc的()是一些类的方法(例如1类)可以从一个QObject继承这个类,并定义一个槽:

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

所述的物体,其改变tcpCommunicator状态(等级2)应该有信号:

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

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