C++ AfxBeginThread和AfxEndThread 使用方法
启动线程:
CWinThread* AfxBeginThread( 线程函数,this );
线程的退出:
在刚刚使用的时候,退出线程的方法有问题,导致退出的时候异常。
下面说线程退出的方法:
1. 线程函数返回
线程都在死循环中,当满足一定条件时,return,也会将线程结束。
2. 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对象中有线程的句柄,可以使用该句柄强行杀死线程。但是不推荐使用这种方式,当可以正常结束的时候,选择前两种方法较好。
C++ AfxBeginThread和AfxEndThread 使用方法的更多相关文章
- AfxBeginThread和AfxEndThread+内存泄露
ref http://blog.csdn.net/kut00/article/details/4209680 启动线程: CWinThread* AfxBeginThread( 线程函数, this ...
- _beginthread和CreatThread的区别
转自:http://www.jb51.net/article/41459.htm 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来 ...
- MFC创建线程示例
MFC创建线程示例 AfxBeginThread() 创建现场的方法是AfxBeginThread()函数. 在[.CPP]文件定义一个全局变量,决定什么时候退出这个线程. BOOL g_bWillE ...
- Windows多线程基础
进程与线程基础 程序: 计算机指令的集合,以文件的形式存储在磁盘上 进程: 正在运行是程序实例,以是一个程序在其自身的地址空间的一次执行活动.进程有一个进程管理的内核对象和地址空间组成. 线程: 程序 ...
- javaSE27天复习总结
JAVA学习总结 2 第一天 2 1:计算机概述(了解) 2 (1)计算机 2 (2)计算机硬件 2 (3)计算机软件 2 (4)软件开发(理解) 2 (5) ...
- VC++ 结束线程 AfxBeginThread AfxEndThread
如果你的线程是从CWinThread继承出来的,结束自己就用AfxEndThread, 如果是外部调用的话,可以用PostThreadMessage(m_nThreadID, WM_QUIT,0,0) ...
- AfxBeginThread的介绍/基本用法
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...
- C++ AfxBeginThread的介绍/基本用法
AfxBeginThread 用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...
- AfxBeginThread
用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和 ...
随机推荐
- 屏蔽windows快捷键的方法
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...
- Java 6- Java 运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...
- 避免crontab输出日志
在cron的自动执行语句后加上> /dev/null 2>&1 例:4 3 * * * /usr/bin/a.sh > /dev/null 2>&1这样就OK拉 ...
- python函数的创建和函数参数
[1]#函数的作用:1.减少重复代码 2.方便修改,更容易扩展3.保持代码的一致性 [2]#函数简单的定义规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须 ...
- jmeter解决登录token获取
1.以百度登录为例 2.打开console 3.根据console结果设置公共的header在test plan 4.建立测试计划-test plan 5.正则表达式提取器,获取token 6.登录t ...
- c# 后台AJAX
public class BackA { #region 后台 AJAX public static string GetPage(string posturl) { Stream outstream ...
- [Unity插件]Lua行为树(九):条件节点调整
先看一下之前的条件节点是怎么设计的: BTConditional.lua BTConditional = BTTask:New(); local this = BTConditional; this. ...
- ROS Industrial 简介
ROS_I means ROS Industrial ROS_I 解决了哪些问题: 1. 让自动化可以互相协作,操纵器.末端执行器.感知系统/传感器,移动平台,周边设备,都可只用一种语言(ROS me ...
- 【HQL】常用函数
CONCAT_WS(separator, str1, str2,...) 多列转1列,以分割符分割 使用场景: 1.多列在一列显示: 2.多列转多行作为辅助,结合split和explode使用 SEL ...
- 安装JavaFX Scene Builder,并配置到Eclipse
转载自:https://www.yiibai.com/javafx/install-javafx-scene-builder-into-eclipse.html 1-JavaFX Scene Buil ...