如何从其他线程停止Qt并发递归运行函数?
我想从运行在与其他线程不同的单独线程中的递归函数返回 我尝试使用递归互斥,但它不起作用 我们如何才能做到这一点如何从其他线程停止Qt并发递归运行函数?,qt,Qt,我想从运行在与其他线程不同的单独线程中的递归函数返回 我尝试使用递归互斥,但它不起作用 我们如何才能做到这一点 bool stop = false; QMutex mutex(QMutex::Recursive); int count = 1; void worker_run () { QMutexLocker locker(&mutex); if(stop) return; qDebug () << count++; worke
bool stop = false;
QMutex mutex(QMutex::Recursive);
int count = 1;
void worker_run () {
QMutexLocker locker(&mutex);
if(stop)
return;
qDebug () << count++;
worker_run();
}
void worker_stop () {
QMutexLocker locker(&mutex);
stop = true;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QtConcurrent::run(&worker_run);
QtConcurrent::run(&worker_stop);
return a.exec();
}
bool-stop=false;
QMutex互斥(QMutex::Recursive);
整数计数=1;
无效工作线程运行(){
QMutexLocker锁柜(&mutex);
如果(停止)
返回;
qDebug()删除所有互斥体并重试。原因是worker_run不是一个关键区域,除了对stop变量的访问之外,它被授予原子权限
我认为您还缺少stop变量的volatile限定符(或者至少使用一些显式的原子数据类型)。我认为问题在于对worker_run()的递归调用没有解锁互斥锁。
请记住,当QMutexLocker超出作用域时,它将解锁。然后给它一个作用域
void worker_run () {
{ QMutexLocker locker(&mutex);
if(stop)
return;
}
qDebug () << count++;
worker_run();
}
void worker\u运行(){
{QMutexLocker locker(&mutex);
如果(停止)
返回;
}
qDebug()