如何在QT中创建比主线程更高优先级的线程

时间:2014-03-24 04:53:46

标签: multithreading qt user-interface

我已经为 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

如何创建高优先级线程而不是主线程?

2 个答案:

答案 0 :(得分:0)

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

MainWindow::thread()->priority()没用,因为窗口必须始终在GUI(主线程)中。此外,这条线甚至没有你认为它做的。这相当于调用QObject::thread()->priority(),进一步相当于this->thread()->priority()。它只是意味着“返回线程的优先级。你似乎在线程拥有的对象中运行该行,显然是在做错了之后,即MyThreadObj->moveToThread(MyThreadObj)。不要这样做。” / p>

以下工作有望满足您的期望。请注意myThread->moveToThread的缺席。这不是必需的。如果需要从QThread发出信号,请使用该线程中的辅助对象。或者,也许只使用移动到线程的普通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();
}

答案 1 :(得分:-3)

你可以优先考虑子线程。

Qt thread priority