多线程退出可以用int变量做标记吗? 刚才看Win32多线程程序设计时,他说线程退出的做法是在你的程序代码中设立一个标记,利用其值来要求线程结束自己。然后他建立了个事件,周期性地检查一个event对象。事件如果激活了就return。我想问为什么不用一个int变量来做标记呀?int变量变为1了线程就退出。这样可以吗?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 event可以阻塞,int一定要busy while,CPU负担加重,而且还要保证读取int的数据完整(加锁) if(WaitForSingleObject(hRequestExitEvent, 0) != WAIT_TIMEOUT) { printf("Received request to terminate\n"); return (DWORD)-1; } 书上这样做也没有堵塞呀。而且我以为不需要堵塞,只不过是线程每次运行到那的时候检查一下,能退出就return了,不能退出就接着执行。例如 if(i == 1) return;不等于1就接着执行。至于“要保证读取int的数据完整”,我就是要在他退出的时候再别的线程里让 i = 1,就行了。就算切换时间片了的话下回运行的话也可以的吧。 应该不需要加锁吧,我在work线程里就是让他检验一下,if(i == 1) return;也不对i进行赋值什么的操作。只在主线程想让他退出的时候才对i进行i=1的操作; if(WaitForSingleObject(hRequestExitEvent, 0) != WAIT_TIMEOUT) 这样就是在堵塞 如果dwMilliseconds 为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。不是立即返回码?那就算他是阻塞了,我就像问问if(i==1) return;这样为什么不好呀!? int赋值不是atom操作,操作的时候,CPU可以进行线程调度,虽然可能性不大。如果用_asm还可以说的过去。当然这也不是一成不变的,检查int在有些时候可能还更好。 自己逻辑控制好了,用int更好用. 回复于: 2012-12-04 10:06:10 event可以阻塞,int一定要busy while,CPU负担加重,而且还要保证读取int的数据完整(加锁) 以前看Java的时候,曾看到在大规模并发的时候,利用CPU的一个什么特性(类似spinlock),用busy loop更加高效... 绝对可以,实时性要求不高时间,可以用的if(g_flag) return 0;else Sleep(10); BCG grid问题 一个win程序 怎么搞都还是过不去 MFC简单的问题 在WORD插件中如何遍历WORD文件中所有元素? 熟悉邮箱的大虾们,帮忙啊! 用AfxBeginThread启动新线程后如何强行终止该线程? 【如何作出类似VB的···属性页···】 IE为什么总是产生错误报告? 上海的朋友,上海启明公司怎么样,望各位大哥指点指点,thanks 请问各位大侠,做一个分时程序要注意哪些问题? VC6.0调试的显示调用调试和隐式调用调试如何用的啊 2个CDockablePane 面板显示问题
{
printf("Received request to terminate\n");
return (DWORD)-1;
}
书上这样做也没有堵塞呀。而且我以为不需要堵塞,只不过是线程每次运行到那的时候检查一下,能退出就return了,不能退出就接着执行。
例如 if(i == 1)
return;
不等于1就接着执行。
至于“要保证读取int的数据完整”,我就是要在他退出的时候再别的线程里让 i = 1,就行了。就算切换时间片了的话下回运行的话也可以的吧。
if(i == 1)
return;
也不对i进行赋值什么的操作。只在主线程想让他退出的时候才对i进行i=1的操作;
这样就是在堵塞
不是立即返回码?
那就算他是阻塞了,我就像问问
if(i==1)
return;
这样为什么不好呀!?
当然这也不是一成不变的,检查int在有些时候可能还更好。
event可以阻塞,int一定要busy while,CPU负担加重,而且还要保证读取int的数据完整(加锁)
if(g_flag)
return 0;
else
Sleep(10);