我有一个C++ Qt程序,它使用使用QMutex和QWaitCondition实现的具有暂停/恢复机制的QThread。这就是它的样子:
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
}
}我使用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();
}
}当我调用pause()方法的MyClass,我得到分割故障信号指向(在调试模式)到第3行在MyThread.cpp - syncMutex.lock();。它不依赖于MyThread实例的数量-它与std::向量中的一个线程保持平衡。
我很确定我错过了一些重要的事情,但我不知道是什么。我做错了什么?
(如果有关系的话,我会在Qt 5中使用MinGW 4.7编译器)
发布于 2013-05-17 15:35:08
在for循环中,使用this->threadsVector.size()而不是sizeof(this->threadsVector)来查找向量包含多少项。
https://stackoverflow.com/questions/16612662
复制相似问题