run() { while(running) { // do stuff or just wait for signal exec(); }}
void MyThread::run() { // init mContinue = new QMutex; mWaitCondition = new QWaitCondition; while(running) { lock(); // do stuff unlock(); if (pause) { mWaitCondition->wait(mContinue); } exec(); }}void MyThread::pause() { pause = true; }void MyThread::resume() { if (pause) { pause = false; mWaitCondition->wakeAll(); }}
[quote author=vulko link=topic=27922.msg203570#msg203570 date=1415965762]а вообще не очень понимаю что значит последовательный запуск одного и того же qthread... несколько раз дергаешь start?
void MyThread::run() { // init mContinue = new QMutex;
Если в QThread запустилась нитка, залочила некий мутекс, завершилась (но мутекс не разлочился), и потом снова запустилась (тот же объект QThread) - при повторном запуске, вместо dead-lock она в этом мутексе просто молча залипает.
_waiterLockMutex(); // waiterMutex.lock(); _waiterLocker(); // waiterWaitCondition.wait( &waiterMutex ); _waiterUnLockMutex(); // waiterMutex.unlock();
waiterWaitCondition.wakeOne();