关于退出程序时关闭线程的问题
程序中有个定时器在定时采集数据,程序退出时如果该定时器启动的程序没退出程序就会出错,请问在退出程序时怎么知道还有线程没结束? 问题点数:20、回复次数:12Top
1 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-07-02 10:05:17 得分 0
退出时会自动关闭线程的,如果想要知道某个线程是否还没结束
BOOL GetExitCodeThread(
HANDLE hThread,
LPDWORD lpExitCode); 的第二个参数的返回值是否是STILL_ACTIVETop
2 楼surstar(我要写个操作系统出来……)回复于 2005-07-02 10:19:05 得分 0
楼上的都说了~Top
3 楼mmzz_wang(abcdef)回复于 2005-07-02 10:33:06 得分 0
vcmute(横秋) :
在哪里做?Top
4 楼eeixy2000(老顽童)回复于 2005-07-02 13:11:51 得分 0
1、首先,将定时器关掉(KillTimer(idTimer)),以防采集程序再次启动;
2、关闭正在采集数据的线程,这可能比较麻烦。提供一个思路:
在创建采集数据的线程时,保存好该线程的句柄,以备关闭线程时之用;
退出程序之前先检测采集线程是否结束,如果已经结束,则可以正常退出,否则就要采取措施使得采集线程体面的退出。(当然可以强行退出线程,但是微软不提倡这样做)如何体面的退出是个比较费事的事情,一般的如果每次采集不会占用较长时间(比如也就几秒钟),建议等待线程自己结束;如果采集时间比较长,则可以在采集线程中的每一步之前判断是否需要继续采集,如不需要(比如程序正在等待退出),则跳出采集函数。Top
5 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-07-02 13:26:59 得分 0
获得线程的退出码Top
6 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-07-02 13:29:13 得分 0
::ExitThread(0);0就是退出码Top
7 楼lodge(往事如风)回复于 2005-07-02 14:24:08 得分 0
可以在设一个全局变量标志,做为退出标志
启动时把它赋为真,在程序退出时弄为FALSE,在线程中判断这个标志,为FALSE就退出线程
在应用程序的EXITINSTANCE中用WAITFORSINGLEOBJECT等待线程结束Top
8 楼AntonlioX(做人要厚道)回复于 2005-07-02 16:17:18 得分 0
顶Top
9 楼AntonlioX(做人要厚道)回复于 2005-07-02 16:25:08 得分 0
lodge(往事如风) ( ) 所说的“可以在设一个全局变量标志,做为退出标志”的方法不是太好 ,因为这将采用“polling”的技术,效率较低 (在 候捷的 《win32多线程程序色伙计》说的,不是我说的)。
你应该采用 事件的方法来替换”设置全局变量标志“的方法。
在线程里面 waitforsingleobject(设置超时的时间为0) 等待退出事件。
在主线程中 ,当你退出之前 setevent 发出 退出事件。
由于子线程的退出可能要占用一点时间,你可以在setevent后 sleep一点时间。至于sleep多久 就要根据你的子线程的状况来决定。当然了 你也可以设置的大一些。Top
10 楼AntonlioX(做人要厚道)回复于 2005-07-02 16:26:33 得分 0
打错字了 是 候捷的 《win32多线程程序设计》Top
11 楼stevecrisewu(月亮骑士)回复于 2005-07-02 17:11:29 得分 0
用TerminateThread强制干掉Top
12 楼AntonlioX(做人要厚道)回复于 2005-07-02 18:50:10 得分 0
TerminateThread是最简单的方法Top




