0

我是 Qt 的新手,想了解有关 QThread 实例管理的线程的自定义调度的推荐方法。

我想要一个调度程序线程,它响应应用程序状态的变化,使某些线程进入睡眠状态或改变它们的优先级。调度应该是抢先式的,因为我应该能够让某些工作人员(可能正在等待互斥体)进入睡眠状态并稍后调用它们。

我特别好奇的是,为什么 QThread::sleep 和相关函数都受到保护?

如果不能通过 Qt 线程类获得对调度的细粒度控制,那么我想知道其他可能性。

4

1 回答 1

0

那么有没有办法让其他线程休眠并稍后唤醒它们?

在下班时让线程休眠通常不是完成您需要的最有效或最干净的方法。您通常希望在线程有工作时保持活动状态,并在它们没有工作时销毁它们(而不是迫使停滞的线程反复休眠)。在 Qt 中管理线程的惯用方式是利用信号/槽接口来促进线程的创建和销毁。

下面是 QThread 文档中的一个简单示例,它展示了如何使用 Qt 的这个特性来处理线程调度,而几乎没有外部干预:

 class Worker : public QObject
 {
     Q_OBJECT

 public slots:
     void doWork() {
         ...
     }
 };

 void MyObject::putWorkerInAThread()
 {
     Worker *worker = new Worker;
     QThread *workerThread = new QThread(this);

     connect(workerThread, SIGNAL(started()), worker, SLOT(doWork()));
     connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
     worker->moveToThread(workerThread);

     // Starts an event loop, and emits workerThread->started()
     workerThread->start();
 }

对于更高级的线程方案,Qt 还提供了额外的线程机制(利用信号和槽),如QThreadPoolQtConcurrent命名空间中的任何东西。

于 2013-03-10T23:35:45.990 回答