這似乎有點混亂。你說你的主線程調用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