CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于退出程序时关闭线程的问题

楼主mmzz_wang(abcdef)2005-07-02 09:45:24 在 VC/MFC / 基础类 提问

程序中有个定时器在定时采集数据,程序退出时如果该定时器启动的程序没退出程序就会出错,请问在退出程序时怎么知道还有线程没结束? 问题点数: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

相关问题

  • (不好意思)怎样保证主程序退出时线程一定已关闭?
  • 阻塞式的INDY如何解决线程关闭超时程序无法退出???
  • 如何在线程中关闭程序?
  • 主线程外加两个辅线程的程序的退出问题!!
  • 如何结束线程?不结束线程就退出程序好吗?
  • 用了线程就无法退出程序?
  • 有关多线程程序的关闭问题
  • 开线程后,主程序无法关闭
  • 线程运行期间,程序退出,怎样释放线程中动态分配的内存?
  • 求助:我的多线程程序在新建的线程中应用ado以后进程无法退出

关键词

  • win32
  • 线程
  • 数据
  • 退出
  • 采集
  • 程序
  • 定时器
  • 标志
  • 关闭
  • 全局变量

得分解答快速导航

  • 帖主:mmzz_wang

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo