如何使用事件循环管理线程
How to manage a thread using an event loop?
我创建了一个类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
中的一些数据。在这方面,我已经阅读了此页面上提供的文档,但我应该在线程MyThread
中使用事件循环。如何更改类MyThread
以使用事件循环管理线程?
在 QThread
中获取事件循环的最简单方法是不对其进行子类化。QThread::run()
调用的默认实现QThread::exec()
启动事件循环。
这意味着当前在run()
覆盖中的代码必须进入单独的 worker 类,这意味着您将实际工作与线程控件分开,这也使您的代码更加灵活。
QThread 文档中有一个示例;我强烈推荐第一个不子类QThread
的例子。
相关文章:
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 如何在新的 C++17 并行算法中管理线程?
- C++ 提升示例:创建和管理线程(编译错误)
- C++事件管理器多线程可靠
- 如何用多态性管理线程资源?(C++)
- 最佳多线程全局变量管理
- 线程管理内存泄漏
- 如何在不让用户等待的情况下管理多个线程
- C 多线程:管理线程
- Boost ::线程何时终止?如何管理Boost ::线程
- Poco任务管理器/Boost线程混合和匹配
- 管理多线程应用程序中的共享变量
- 我的多线程游戏始终为100%CPU.如何管理线程活动以减少CPU负载
- Windows7内存管理 - 如何防止并发线程阻止
- 任务管理器显示的线程比我创建的线程多
- 在没有"线程管理"的情况下C++设置并发哈希表/哈希?
- 使用QThread运行可管理后台线程的正确方式
- 管理多个并发线程
- 创建远程线程:内存管理
- 如何使用事件循环管理线程