Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从其他线程停止Qt并发递归运行函数?_Qt - Fatal编程技术网

如何从其他线程停止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()