2010-09-29 68 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類型。