我有一个类,它是一些设备的抽象。是否可以使用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