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

Multithreading 如何在QT中创建比主线程优先级高的线程,multithreading,qt,user-interface,Multithreading,Qt,User Interface,我已将主线程优先级设置为NormalPriority(3) 在此之后,我打印了优先级值 qDebug()<<"MainWindow Priority="<< MainWindow::thread()->priority(); qDebug()<<"MyThread Priority="<< MyThreadObj->thread()->priority(); 如何创建比主线程优先级高的线程?我不明白问题出在哪里。根据您的代码,输

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

在此之后,我打印了优先级值

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

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

我不明白问题出在哪里。根据您的代码,输出与预期一致

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

下面的内容很有希望达到您的预期效果。请注意,
myThread->moveToThread
。这是不需要的。如果您需要从
QThread
发出信号,请使用位于该线程中的帮助对象。或者,可以只使用移动到该线程的普通
QObject

MyThread Priority=6
Main Priority=3
MainWindow Priority=3
intmain(intargc,char*argv[])
{
质量保证申请a(argc、argv);
QThread;
myThread.start(QThread::TimeCriticalPriority);

qDebug()您可以优先考虑子线程


我不明白问题出在哪里。根据您的代码,输出与预期一致。
MainWindow::thread()->priority()
是无用的,因为GUI(主线程)中必须始终有一个窗口。这一行的意思是“返回
this
线程的优先级。您似乎在线程拥有的对象中运行该行,显然是在做了错误的事情之后,即
MyThreadObj->moveToThread(MyThreadObj)
。不要这样做。我只更改了第二个线程的优先级。但也更改了主线程的优先级否,它没有。打印第一个
6
的行不会执行您认为它会执行的操作。打印
6
的两行引用同一个线程-只需打印
线程的值()你可以访问,你会看到。你写的完全模糊的C++并不是人们可能会随便想到的。添加“代码> qyAsScript(主窗口::thorde=)= MythRead Objix>线程)(<代码> > -你会看到断言成功了!这是因为这行相当于<代码> QYAsHeLT(这个-> thRead()= = MythRead Obji- > thTh())
,您显然是从线程的
run()方法内部调用它!
qDebug()<<"MainWindow Priority="<< MainWindow::thread()->priority();
qDebug()<<"MyThread Priority="<< MyThreadObj->thread()->priority();
Main Priority=3
MainWindow Priority=6
MyThread Priority=6
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();
}