QMutex与QThread-分段错误 我有一个C++ QT程序,使用QQuin和QuutEx和QWaTeTebug实现的暂停/恢复机制。这就是它的样子:

QMutex与QThread-分段错误 我有一个C++ QT程序,使用QQuin和QuutEx和QWaTeTebug实现的暂停/恢复机制。这就是它的样子:,c++,qt,qthread,qmutex,C++,Qt,Qthread,Qmutex,MyThread.h: class MyThread : public QThread { Q_OBJECT public: MyThread(); void pauseThread(); void resumeThread(); private: void run(); QMutex syncMutex; QWaitCondition pauseCond;

MyThread.h:

class MyThread : public QThread
{
    Q_OBJECT

    public:
        MyThread();
        void pauseThread();
        void resumeThread();

    private:
        void run();
        QMutex syncMutex;
        QWaitCondition pauseCond;
        bool pause = false;
}
MyThread.cpp:

void MyThread::pauseThread()
{
    syncMutex.lock();
    pause = true;
    syncMutex.unlock();
}

void MyThread::resumeThread()
{
    syncMutex.lock();
    pause = false;
    syncMutex.unlock();
    pauseCond.wakeAll();
}

void MyThread::run()
{
    for ( int x = 0; x < 1000; ++x )
    {
        syncMutex.lock();
        if ( pause == true )
        {
            pauseCond.wait ( &syncMutex );
        }
        syncMutex.unlock();
        //do some work
    }
}
void MyThread::pauseThread()
{
syncMutex.lock();
暂停=正确;
syncMutex.unlock();
}
void MyThread::resumeThread()
{
syncMutex.lock();
暂停=错误;
syncMutex.unlock();
paussecond.wakeAll();
}
void MyThread::run()
{
对于(整数x=0;x<1000;++x)
{
syncMutex.lock();
如果(暂停==真)
{
paussecond.wait(&syncMutex);
}
syncMutex.unlock();
//做些工作
}
}
我使用MyThread类的向量:

void MyClass::createThreads()
{
    for ( int x = 0; x < 2; ++x)
    {
        MyThread *thread = new MyThread();
        thread->start();

        //"std::vector<MyThread *> threadsVector" is defined in header file
        this->threadsVector.push_back ( thread ); 
    }
}

void MyClass::pause()
{
    for ( uint x = 0; x < sizeof ( this->threadsVector ); ++x )
    {
        this->threadsVector[x]->pauseThread();
    }
}

void MyClass::resume()
{
    for ( uint x = 0; x < sizeof ( this->threadsVector ); ++x )
    {
        this->threadsVector[x]->resumeThread();
    }
}
void MyClass::createThreads()
{
对于(int x=0;x<2;++x)
{
MyThread*线程=新的MyThread();
线程->开始();
//“std::vector threadsVector”在头文件中定义
此->threadsVector.push_back(线程);
}
}
void MyClass::pause()
{
对于(uint x=0;xthreadsVector);+x)
{
this->threadsVector[x]->pauseThread();
}
}
void MyClass::resume()
{
对于(uint x=0;xthreadsVector);+x)
{
此->线程向量[x]->resumeThread();
}
}
当我调用
MyClass
pause()
方法时,我得到了指向MyThread.cpp-
syncMutex.lock()中第3行的分段故障信号(在调试模式下)。它不依赖于
MyThread
实例的数量-它与std::vector中的1个线程持平

我很确定我错过了一些重要的事情,但我不知道是什么。我做错了什么


(如果有关系,我使用带Qt5的MinGW 4.7编译器)

在for循环中使用
this->threadsVector.size()
而不是
sizeof(this->threadsVector)
来找出向量包含多少项。

在for循环中使用
this->threadsVector.size()
而不是
sizeof(this->threadsVector)
找出向量包含多少项。

我还建议使用QAtomicBool,而不是使用与等待条件相同的互斥来保护布尔值。我还建议使用QAtomicBool,而不是使用与等待条件相同的互斥来保护布尔值。