http://hi.baidu.com/andywangcn/item/50d640c325290a2aef4665c4

1、 启动线程:

CWinThread* AfxBeginThread( 线程函数,this );

2、通常导致线程终止的两种情况是:控制函数退出或不允许线程完成运行。如果字处理器使用后台打印线程,若成功完成打印,则控制函数将正常终止。但是,如果用户要取消打印,后台打印线程则不得不提前终止。本主题介绍如何实现每一种情况,以及在终止后如何获取线程的退出代码。

(1)正常线程终止

对于辅助线程,正常线程终止很简单:退出控制函数并返回表示终止原因的值。可以使用 函数或 return 语句。一般情况下,0 表示成功完成,但这取决于您自己。

对于用户界面线程,该过程也很简单:从用户界面线程内调用 Platform SDK 中的 。PostQuitMessage 采用的唯一参数是线程的退出代码。对于辅助线程,0 通常表示成功完成。

(2)过早的线程终止

过早终止线程几乎一样简单:从线程内调用 。将所需的退出代码作为唯一参数传递。这将停止执行线程、解除对线程堆栈的分配、分离附加到线程的所有 DLL 并从内存中删除线程对象。

必须从要终止的线程内调用 AfxEndThread。如果要从其他线程终止线程,必须设置两个线程间的通信方法。

举一个例子:

可以创建一个信号量,用WaitForSingleObject函数来检测该信号量的状态。

成员变量 m_hThreadEvent;

m_hThreadEvent = CreateEvent( NULL, FALSE, FALSE, NULL );

线程的执行函数:

for ( ; ; )

{         DWORD dwRetVal;

dwRetVal = WaitForSingleObject( m_hThreadEvent, 100 );

if ( dwRetVal == WAIT_TIMEOUT )

{                    // TODO:

}

else

{

// stop receive text thread.

DWORD dwExitCode;

GetExitCodeThread( m_pThreadRecv->m_hThread, &dwExitCode );

AfxEndThread( dwExitCode, TRUE );

}

}

要结束线程时,使用SetEvent,将信号量置为有信号。

该线程是在信号量有信号时,退出。

(3)TerminateThread

在CWinThread对象中有线程的句柄,可以使用该句柄强行杀死线程。但是不推荐使用这种方式,当可以正常结束的时候,选择前两种方法较好。

检索线程的退出代码

若要获取辅助线程或用户界面线程的退出代码,请调用 函数。有关此函数的信息,请参见 Platform SDK。此函数获取线程(存储在 CWinThread 对象的 m_hThread 数据成员中)的句柄和 DWORD 的地址。

如果线程仍然是活动的,GetExitCodeThread 将 STILL_ACTIVE 放置在提供的 DWORD 地址中;否则将退出代码放置在该地址中。

检索 对象的退出代码还需要一步。默认情况下,当 CWinThread 线程终止时,删除该线程对象。这意味着不能访问 m_hThread 数据成员,因为 CWinThread 对象不再存在。若要避免出现这种情况,请执行以下操作之一:

  • 将 m_bAutoDelete 数据成员设置为 FALSE。这使 CWinThread 对象在线程终止后仍可以继续存在。然后可以在线程终止后,访问 m_hThread 数据成员。但是,如果使用此方法,就得销毁 CWinThread 对象,因为框架不会自动删除该对象。这是首选方法。

  • 单独存储线程的句柄。创建线程后,(使用 ::DuplicateHandle)将其 m_hThread 数据成员复制到其他变量,并通过该变量访问该成员。这样,终止后即会自动删除对象,并且仍然可以找到线程终止的原因。请注意:在可以复制句柄之前,线程不终止。执行此操作的最安全的方式是将 CREATE_SUSPENDED 传递到 ,存储句柄,然后通过调用 继续执行线程。

任一方法都可以使您确定 CWinThread 对象终止的原因。

MFC启动和关闭线程相关推荐

  1. Python 线程启动和关闭

    Python 线程启动和关闭 线程启动和关闭的Demo 测试结果显示,发现至少3s才能停止线程 线程启动和关闭的Demo Python自带的线程函数,发现没有停止的功能,有些需要重载后使用,但是这里还 ...

  2. python关闭线程daemon_python中threading开启关闭线程操作

    在python中启动和关闭线程: 首先导入threading import threading 然后定义一个方法 def serial_read(): ... ... 然后定义线程,target指向要 ...

  3. powershell 启动线程与关闭线程

    启动线程 $ScreenCapture="C:\ResolutionTool\ScreenCapture.exe" Start-Process $ScreenCapture 关闭线 ...

  4. MFC的进程和线程,非正常终止

    进程是一个可执行的程序,由私有虚拟地址空间.代码.数据和其他操作系统资源(如进程创建的文件.管道.同步对象等)组成.一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程. ...

  5. c语言第一个mfc程序,c语言之MFC的进程和线程

    MFC的进程和线程 1.Win32的进程和线程概念 进程是:一个可执行的程序,由私有虚拟地址空间.代码.数据和其他操作系统资源(如进程创建的文件.管道.同步对象等)组成.一个应用程序可以有一个或多个进 ...

  6. 使用windows钩子捕获进程的启动和关闭消息

    2012年12月13日补充: 这篇文章写的时候是我还在上学的时候,所以不管是从技术实现角度还是文笔都显得很嫩,在此向所有无意间看到这篇文章的人表示抱歉.我写了这篇文章之后2年有人想问我要源代码,唉,如 ...

  7. 关闭线程池 shutdown 和 shutdownNow 的区别

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/xiewenfeng520/article/details/107013342 前 ...

  8. Linux下Tomcat的启动、关闭

    在Linux系统下,启动和关闭Tomcat使用命令操作. 进入Tomcat下的bin目录 cd /java/tomcat/bin 启动Tomcat命令 ./startup.sh 停止Tomcat服务命 ...

  9. python 强制结束线程_在python中实现强制关闭线程的示例

    Python 如何强制关闭线程过去只可以用来回忆,别沉迷在阴影中,否则永远看不清前面的路. Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threadin ...

最新文章

  1. python【力扣LeetCode算法题库】820- 单词的压缩编码
  2. 007-SDK框架之LYWSDKInterfaceProtocol.cpp
  3. wpf Visibility 动画
  4. python异常类型(Exception只是常规错误的基类)
  5. [Android] 年年有鱼手机主题
  6. 如何创建自定义性能计数器
  7. CSS外边距合并(塌陷/margin越界)
  8. fgo最新服务器,FGO服务器故障追加说明 凌晨3点已开服
  9. [MATLAB]代数/常微分求解(solve/dsolve)
  10. nginx上传文件大小限制
  11. 闲谈IPv6-源IP地址的选择(RFC3484读后感)
  12. 今日冬至《心的深处》孙溟㠭篆刻艺术
  13. 《NFL橄榄球》:洛杉矶公羊·橄榄1号位
  14. 西电计算机学院2019年复试线,2021西安电子科技大学研究生分数线一览表(含2019 2020历年复试)...
  15. Identifying and Tracking Sentiments and Topics from Social
  16. 计算机技术专业面试英语翻译,面试英文翻译:你为什么选择这个专业
  17. SourceMap 使用教程
  18. 电子邮件乱码产生的主要原因及几种解决方法
  19. 9月17日服务器维护,2009年9月17日维护公告
  20. Win7下缩小任务栏宽度

热门文章

  1. kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
  2. HDFS中常用的shell命令总结
  3. android系统五大布局,android 五大布局文件
  4. 单片机c语言随机数,单片机C语言如何产生随机数
  5. android odex版本调试_Android可执行文件之谜 - DEX与ODEX, OAT与ELF
  6. 把室友的STM32换成了GD32,会被打吗?
  7. 没有什么能难倒伟大的电子工程师,办公室想点蚊香没打火机怎么办?安排!...
  8. 搞嵌入式Linux,做底层还是应用?底层要掌握哪些技能?
  9. 是单片机高手还是菜鸟?看看你的程序框架就知道了
  10. 你买过假芯片吗?元器件专家为您揭秘假冒芯片的套路!