首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMutex与QThread分割故障

QMutex与QThread分割故障
EN

Stack Overflow用户
提问于 2013-05-17 15:22:26
回答 1查看 2.2K关注 0票数 1

我有一个C++ Qt程序,它使用使用QMutex和QWaitCondition实现的具有暂停/恢复机制的QThread。这就是它的样子:

MyThread.h:

代码语言:javascript
复制
class MyThread : public QThread
{
    Q_OBJECT

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

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

MyThread.cpp:

代码语言:javascript
复制
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
    }
}

我使用MyThread类的向量:

代码语言:javascript
复制
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();
    }
}

当我调用pause()方法的MyClass,我得到分割故障信号指向(在调试模式)到第3行在MyThread.cpp - syncMutex.lock();。它不依赖于MyThread实例的数量-它与std::向量中的一个线程保持平衡。

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

(如果有关系的话,我会在Qt 5中使用MinGW 4.7编译器)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-17 15:35:08

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16612662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档