我怎么能创建一个高优先级线程比主线程在QT



我设置主线程优先级为NormalPriority(3)

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QThread::currentThread()->setPriority(QThread::NormalPriority);
    qDebug()<<"Main Priority="<< QThread::currentThread()->priority();
    MainWindow w;
    w.show();
    return a.exec();
}

和我已经创建了另一个线程从MainWindow.cpp

MyThread MyThreadObj;
MyThreadObj.start(QThread::TimeCriticalPriority);

之后,我打印了优先级值

qDebug()<<"MainWindow Priority="<< MainWindow::thread()->priority();
qDebug()<<"MyThread Priority="<< MyThreadObj->thread()->priority();

输出

Main Priority=3
MainWindow Priority=6
MyThread Priority=6

如何创建一个比主线程优先级高的线程?

我不明白是什么问题。根据您的代码,输出与预期一致。

MainWindow::thread()->priority()是无用的,因为窗口必须始终在GUI(主线程)中。而且,这条线根本不像你想的那样有用。它等于QObject::thread()->priority(),再等于this->thread()->priority()。它的意思是"返回这个线程的优先级"。你似乎在线程拥有的对象中运行那条线,显然是在做了错误的事情之后,即MyThreadObj->moveToThread(MyThreadObj)。不要那样做。

下面的工作希望你的期望。注意myThread->moveToThread的缺失。不需要。如果需要从QThread发出信号,请使用该线程中的helper对象。或者,也许只是使用一个普通的QObject,它被移动到线程。

MyThread Priority=6
Main Priority=3
MainWindow Priority=3
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QThread myThread;
    myThread.start(QThread::TimeCriticalPriority);
    qDebug()<<"MyThread Priority="<< myThread.priority();
    Q_ASSERT_X(myThreadObj.thread() == QThread::currentThread(),
               "myThreadObj", "Usually moving a QThread to another thread is an error");
    qDebug()<<"Main Priority="<< QThread::currentThread()->priority();
    QMainWindow w;
    qDebug()<<"MainWindow Priority="<< w.thread()->priority();
    myThread.quit();
    w.show();
    return a.exec();
}

你可以给子线程优先级。

Qt线程优先级

最新更新