是否可以设置主GUI线程的优先级,以便与其他线程(QThread)相比具有更高的优先级?
我的目标是在其他线程进行一些密集计算时不冻结GUI,这可能会占用CPU到100%的负载.如果有人可以分享一种方法来确保GUI在此期间不会冻结,而其他计算线程仍然可以尝试最大化CPU使用率,那将是很棒的.
我考虑过管理其他线程,所以我不会同时启动太多的计算线程.
我有一个3个QThreads彼此调用(所有都继承自QThread.我知道有些人可能建议使用moveToThread,但现在暂时忽略这个事实).简化代码如下所示:
Thread1类:
void
Thread1::run
{
// some execution
Thread2 t2 = new Thread2();
connect(t2,SIGNAL(finished),this,SLOT(onFinished));
t2->start();
while(!stop) // stop was initialized as false
{
this->msleep(10);
}
}
void Thread1::onFinished(){ stop = true; }
Run Code Online (Sandbox Code Playgroud)
Thread2类:
void
Thread2::run
{
// some execution
Thread3 t3 = new Thread3();
connect(t3,SIGNAL(finished),this,SLOT(onFinished));
t3->start();
while(!stop) // stop was initialized as false
{
this->msleep(10);
}
}
void Thread2::onFinished(){ stop = true; }
Run Code Online (Sandbox Code Playgroud)
Thread3类:
void
Thread3::run
{
// some execution
QMutexLocker ml(&mMutex);
}
Run Code Online (Sandbox Code Playgroud)
当我只有两个线程时,它完全正常(例如,只有thread2和thread3).在我转移到三线程场景之后,onFinished()方法似乎不再正确连接finished()信号.已经调用了thread2中的onFinished().而且我很确定thread3的执行已经完成.
谁能告诉我哪里可能做错了?
我正在使用来自http://users.ics.forth.gr/~lourakis/levmar/的库,该库是用C语言编写的.
但是我将它包含在成员函数"dlevmar_der"中,该函数期望两个函数指针作为其参数:
int dlevmar_der(
void (*func)(double *p, double *hx, int m, int n, void *adata),
void (*jacf)(double *p, double *j, int m, int n, void *adata),
double *p, /* I/O: initial parameter estimates. On output contains the estimated solution */
double *x, /* I: measurement vector. NULL implies a zero vector */
int m, /* I: parameter vector dimension (i.e. #unknowns) */
int n, /* I: measurement vector dimension */
int itmax, /* I: maximum number of iterations …Run Code Online (Sandbox Code Playgroud)