我创建了一个类 MyThread
来使用单独的线程处理来自网络的传入数据。基本上,我创建了一个多客户端服务器,当它接收数据时,将它们添加到共享队列中。线程 MyThread
从共享队列中获取数据,直到它至少出现在该队列中的一个元素。
void MyThread::run()
{
while (true)
{
_mutex.lock();
if (_stopping)
{
_stopping = false;
_mutex.unlock();
break;
}
_mutex.unlock();
QString data;
if (_queue.dequeue(data))
{
process(data);
}
}
}
现在我应该在这个线程中使用一个计时器,因为我需要定期更改 MyThread
类中的一些数据。在这方面,我已经阅读了 this page 上可用的文档。 ,但我应该在线程 MyThread
中使用事件循环。如何更改类 MyThread
以使用事件循环管理线程?
最佳答案
在 QThread
中获取事件循环的最简单方法是不将其子类化。 QThread::run()
的默认实现调用启动事件循环的QThread::exec()
。
这意味着当前在您的 run()
覆盖中的代码必须进入一个单独的工作类,这意味着您将实际工作与线程控制分开,这也使您的代码成为更加灵活。
QThread Documentation 中有一个示例;我强烈推荐第一个不子类 QThread
的例子。
关于c++ - 如何使用事件循环管理线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25928937/