启动线程:

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 使用方法的更多相关文章

  1. AfxBeginThread和AfxEndThread+内存泄露

    ref http://blog.csdn.net/kut00/article/details/4209680 启动线程: CWinThread* AfxBeginThread( 线程函数, this ...

  2. _beginthread和CreatThread的区别

    转自:http://www.jb51.net/article/41459.htm 我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来 ...

  3. MFC创建线程示例

    MFC创建线程示例 AfxBeginThread() 创建现场的方法是AfxBeginThread()函数. 在[.CPP]文件定义一个全局变量,决定什么时候退出这个线程. BOOL g_bWillE ...

  4. Windows多线程基础

    进程与线程基础 程序: 计算机指令的集合,以文件的形式存储在磁盘上 进程: 正在运行是程序实例,以是一个程序在其自身的地址空间的一次执行活动.进程有一个进程管理的内核对象和地址空间组成. 线程: 程序 ...

  5. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  6. VC++ 结束线程 AfxBeginThread AfxEndThread

    如果你的线程是从CWinThread继承出来的,结束自己就用AfxEndThread, 如果是外部调用的话,可以用PostThreadMessage(m_nThreadID, WM_QUIT,0,0) ...

  7. AfxBeginThread的介绍/基本用法

    AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...

  8. C++ AfxBeginThread的介绍/基本用法

    AfxBeginThread    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一 ...

  9. AfxBeginThread

    用户界面线程和工作者线程都是由AfxBeginThread创建的.现在,考察该函数:MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程,分别有如下的原型和 ...

随机推荐

  1. 屏蔽windows快捷键的方法

    using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using ...

  2. Java 6- Java 运算符

    计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运 ...

  3. 避免crontab输出日志

    在cron的自动执行语句后加上> /dev/null 2>&1 例:4 3 * * * /usr/bin/a.sh > /dev/null 2>&1这样就OK拉 ...

  4. python函数的创建和函数参数

    [1]#函数的作用:1.减少重复代码 2.方便修改,更容易扩展3.保持代码的一致性 [2]#函数简单的定义规则: 函数代码块以def关键词开头,后接函数标识符名称和圆括号(),任何传入参数和自变量必须 ...

  5. jmeter解决登录token获取

    1.以百度登录为例 2.打开console 3.根据console结果设置公共的header在test plan 4.建立测试计划-test plan 5.正则表达式提取器,获取token 6.登录t ...

  6. c# 后台AJAX

    public class BackA { #region 后台 AJAX public static string GetPage(string posturl) { Stream outstream ...

  7. [Unity插件]Lua行为树(九):条件节点调整

    先看一下之前的条件节点是怎么设计的: BTConditional.lua BTConditional = BTTask:New(); local this = BTConditional; this. ...

  8. ROS Industrial 简介

    ROS_I means ROS Industrial ROS_I 解决了哪些问题: 1. 让自动化可以互相协作,操纵器.末端执行器.感知系统/传感器,移动平台,周边设备,都可只用一种语言(ROS me ...

  9. 【HQL】常用函数

    CONCAT_WS(separator, str1, str2,...) 多列转1列,以分割符分割 使用场景: 1.多列在一列显示: 2.多列转多行作为辅助,结合split和explode使用 SEL ...

  10. 安装JavaFX Scene Builder,并配置到Eclipse

    转载自:https://www.yiibai.com/javafx/install-javafx-scene-builder-into-eclipse.html 1-JavaFX Scene Buil ...