如何使用事件循环管理线程

How to manage a thread using an event loop?

本文关键字:管理 线程 循环 事件 何使用      更新时间:2023-10-16

我创建了一个类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的例子。