qt程序为什么debug成功,直接运行一直卡死线程结束不了?

写了一个qt程序,由生产者和消费者两个线程在总控制里启动,在debug调试时有结果执行成功,但直接构建加运行后就会一直卡死,生产者结束了,但一直没有信号发出使消费者结束。真搞不懂为什么o(╥﹏╥)o
如果需要的话,我发压缩包给你。

问题出在代码没有正确地处理线程的通信。在debug状态下因为程序执行速度较慢,可能没有暴露出线程同步的问题,而直接运行程序时,线程之间的不同步就会导致程序卡死。建议检查程序中线程的同步方式是否正确,例如使用信号和槽机制、使用互斥锁等。当生产者结束时,应当发送一个信号通知消费者停止运行,避免出现一直等待的情况。需要具体分析代码实现,才能给出更具体的建议。其中一些常见的线程同步问题包括:死锁、资源竞争等。


#include "myqueue.h"

MyQueue&  MyQueue::getGlobalInstance(){
    static MyQueue m_instance;
    return m_instance;
}
void MyQueue::stop(){
    mtx.lock();
    stopped=true;
    mtx.unlock();

}
int MyQueue::put(const Point &p){
    mtx.lock();
    if(stopped){
        mtx.unlock();
        return -1;
    }
    while(m_data.size()==BUFFER_SIZE){
        //等待消费者取出数据
        bufferNotFull.wait(&mtx);
    }
    m_data.push_back(p);

//    qDebug()<<m_data.size();
//    qDebug()<<"生产者放入数据";
    bufferNotEmpty.wakeAll();
    mtx.unlock();
    return 0;
}
int MyQueue::get(Point *p){
    mtx.lock();
    if(stopped||p==nullptr){

        if(m_data.size()==0)
        {
            mtx.unlock();
            return -1;
        }

    }
    while(m_data.size()==0){
        //等待生产者放入数据
        bufferNotEmpty.wait(&mtx);
    }

    auto tmp=m_data.front();
    m_data.pop_front();
    *p=tmp;
    bufferNotFull.wakeAll();
//    qDebug()<<"消费者取出数据";
    mtx.unlock();
    return 0;
}

这是互斥锁这部分的代码,感觉找不出问题呀o(╥﹏╥)o