это кажется немного запутанным.Вы говорите, что ваш основной поток время от времени вызывает doSomeStuff()
для запуска потока, но вы также вызываете его в функции запуска потока.Я просто собираюсь предположить, что есть два случая.Я думаю, что наиболее вероятным случаем является то, что вы хотите, чтобы поток запускался ровно один раз при каждом вызове doSomeStuff в основном потоке, если это так:
void doSomeStuff()
{
...
if(blah blah)
{
if(someObj.isRunning())
someObj.wait();
someObj.start();
}
...
}
void someObj::run()
{
blah blah blah, do some stuff
}
Если вы действительно хотите, чтобы тело потока зациклилосьснова и снова, просто используйте цикл while
вместо попытки вызвать его снова.В этом случае вы, вероятно, намереваетесь, чтобы поток определенно выполнялся для обязательно каждый раз, когда вызывается doSomeStuff, поэтому вам нужно быть немного умнее:
bool someObjRun = false;
QMutex someObjRunLock;
void doSomeStuff()
{
...
if(blah blah)
{
someObjRunLock.lock();
someObjRun = true;
if (!someObj.isRunning() )
someObj.start();
someObjRunLock.unlock();
}
...
}
void someObj::run()
{
someObjRunLock.lock()
while( someObjRun )
{
someObjRunLock.unlock();
blah blah blah, do some stuff
someObjRunLock.lock()
if(should quit...)
{
someObjRun = false;
}
}
someObjRunLock.unlock()
}