0
我有一個用於C++跳棋遊戲的AI Minimax代碼。在這方面,主程序調用,我已經寫在一個新的線程,而它休眠5秒後,它返回到主程序在C++多線程程序中測量已用時間
int flag = 0 ;
void execute(){
hThread = (HANDLE) _beginthread(myfunction) ;
sleep(5000);
if(flag == 1) // Do some work
}
Outputval myfunction(...) {
clock_t start = clock() ;
while(double(clock() - start)/CLOCKS_PER_SEC < 4) { //CLOCKS_PER_SEC = 1000
//DO SOME WORK
}
flag = 1;
return somevalue ;
}
我的問題是,雖然工作在我的函數中完成大約需要的功能3-4秒,但每次迭代後計算的時間是0-1秒的時間。所以即使經過了4秒,myfunction中的循環仍然繼續運行,並且該標誌沒有設置 我也使用了time()函數 - 它給出了相同的問題。
如果不執行()工作,** **執行**嗎?什麼是CLOCKS_PER_SEC定義爲?使用time_t會更簡單嗎?它會以秒爲單位返回時間? – cup
我不認爲你的設計非常好。不保證myfunction()將在主線程的睡眠終止之前完成其工作。無論如何,你試圖實現什麼?產生新線程來執行工作是否有真正的理由?如果你的主線程忙於做其他事情,那將是有意義的,但就目前而言,除了等待外,其他任何事情都沒有做過。此外,您應該嘗試使用信號量或互斥量而不是標誌,因爲它們更安全,超時可能是等待函數中固有的。 –
這就是我使用循環的原因。我必須在myfunction()中確保它在主線程終止睡眠之前返回。執行函數execute我不能改變,因爲它來自其他團隊,必須按原樣使用。我可以修改的唯一東西是myfunction()。 – user3289221