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