c++ - 如何使用事件循环管理线程?

标签 c++ multithreading qt timer

我创建了一个类 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/

相关文章:

c++ - 程序正在打印意外的空行

Java CryptUnprotectData Windows WiFi 密码

c++ - 将 map 值复制到 STL 中的 vector

ios - UIFont线程安全吗?

c# - 是否有可能在C#中的同一线程上同时运行两个任务?

c++ - 使用 CoCreateInstance 从 C++ 调用 COMVisible VB.Net dll

c - pthread_detach 不会改变任何东西

c++ - 获取 QString 时出现段错误

c++ - 有没有办法将 QVariant 与 QVector 一起使用?

macos - MacOS QT 中的错误消息 "OpenCV: not authorized to capture video (status 0)"