这似乎有点混乱。你说你的主线程调用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()
}
为什么会调用线程使函数该函数可以在调用它的线程以外的任何地方运行?另外,-1不要先尝试它。 – Falmarri 2010-12-15 04:48:39
@Falmarri,所以我想在这里检查我的直觉是否正确。顺便说一句,我应该先尝试什么? – wrongusername 2010-12-15 04:49:48
@Falmarri也许你认为我已经写了一些代码,并没有尝试过,并在这里发布......我应该更新问题,使其更清晰 – wrongusername 2010-12-15 04:51:51