我有一個類,它是一些設備的抽象。是否可以使用QThread實現輪詢而不進行子類化?
class Device
{
public:
...
void Start();
void Stop();
void MsgLoop();
signals:
void sMsgArrived();
}
啓動()和stop()從GUI線程調用。 Start()開始運行MsgLoop()的新線程。它看起來像這樣:
void MsgLoop()
{
forever {
if(SUCCESS == ReadMsg()) //synchronous, non-blocking
{
ProcessMsg(); //quite fast
emit sMsgArrived(); //this signal is connected with a slot in GUI thread
}
}
}
當停止()被調用,程序應該從MsgLoop(返回),並停止線程。我怎樣才能實現這與QThread沒有繼承它?
看起來不錯,我會試試這個。另外,你的筆記給了我一個想法。我將使用ReadMsg()的阻塞版本。 Inside Stop()我將重置設備(這是可以接受的),所以ReadMsg()應該返回錯誤代碼。因此,我會知道現在是退出循環的時候了。 – 2011-06-16 09:14:01
聽起來不錯。通常在繁忙的等待循環中有一個線程是不是一個好主意 - 除非你無法承受操作系統調度程序的延遲,但我猜這不是你的情況:) – Fiktik 2011-06-16 09:33:29