///////也许已经火星了,估计这么简单已经有人写了,不过似乎没有百度到
有时候主线程需要通知一个在循环工作中的线程停止工作,或者退出,
用Event或者同步对象来提醒,感觉每次循环速度太慢,正好看到了自旋锁,刚好可以用
你需要在你的工作线程中布置如下代码
DWORD thread_func(LPVOID stopWorkPack) { //C++中要const_cast才能把volatile属性移除,所以这里直接用C转换 volatile long* stopWork=(volatile long*)(stopWorkPack);//这里就不要检查nullptr了。。麻烦 while(InterlockedExchange(stopWork,FALSE)==FALSE) {//检测stopWork是否被设定为TRUE过,其实就和自旋锁一个道理 //TODO: Work Code } return 0; }
然后你想要结束这个线程的时候可以这么写
InterlockedExchange(stopWork,TRUE);
当工作线程调用InterlockedExchange的时候检测到函数的返回值为TRUE,自然就退出了
需要注意的是stopWork在线程返回以后一定为FALSE
效率很快,每一个Interlocked调用大约在50个指令左右,比同步对象要快多了