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