C++ Qt QThread::run过早结束并崩溃

C++ Qt QThread::run过早结束并崩溃,c++,qt,C++,Qt,我有一个自定义线程类,当它运行时,会过早结束,并在调用堆栈中的一些看起来杂乱无章的内部windows函数中神秘地崩溃。下面是我的线程run方法: void MyThread::run() { for(;;) { int result; QMutexLocker(&this->myMutex); query_result(&result); if(result == BAD_RESULT)

我有一个自定义线程类,当它运行时,会过早结束,并在调用堆栈中的一些看起来杂乱无章的内部windows函数中神秘地崩溃。下面是我的线程
run
方法:

void MyThread::run()
{
    for(;;)
    {
       int result;
       QMutexLocker(&this->myMutex);
       query_result(&result);

       if(result == BAD_RESULT)
       {
           sleep(1);
           continue;
       }
       else
       {
           return;
       }
    }
}
下面是我如何创建和运行它:

LoginThread myThread;
QEventLoop myLoop;
QTimer myTimer;

myTimer.setSingleShot(true);
connect(&myTimer, SIGNAL(timeout()), &myLoop, SLOT(quit()));
connect(&myThread, SIGNAL(finished()), &myLoop, SLOT(quit()));

myTimer.start(120000);
myThread.start();
QApplication::setOverrideCursor(Qt::WaitCursor);
myLoop.exec(QEventLoop::ExcludeUserInputEvents);
QApplication::restoreOverrideCursor();
if(myTimer.isActive())
{
   myTimer.stop();
}
else
{
    //handle timeout
}
我不知道为什么会发生这种情况,这是查询结果:

void query_result(int* result)
{
    if(result)
    {
        *result = some_global_integer;
    }
}

我是否做错了导致线程过早终止的操作?

1。试着在Valgrind下运行你的程序。2.如果它没有报告任何内存损坏,请提供一个可以实际编译和运行的MVCE。3.
QMutexLocker(&this->myMutex)
锁定并立即解锁互斥锁。可能不是你想要的。不应该导致任何崩溃。你是什么意思,它不在范围结束时解锁吗?我还在Valgrind下运行了它,没有发现任何损坏。在?1中创建myThread代码的函数是什么。由于您将其创建为临时变量(无名称),因此其范围仅为一行。您可能应该给它一个名称并将其放在单独的块中,如
{QMutexLocker-locker(&this->myMutex);query_-result(&result);}
。2.提供完整的示例以及Valgrind输出。请注意,此->myMutex将在线程睡眠的所有时间被锁定。程序是否达到QApplication::restoreOverrideCursor()的点;事件循环何时完成或何时更早崩溃?您可以将调试输出添加到run()中的每个分支中,以查看处理了哪些部分以及处理了多少次?