MFC线程:AfxBeginThread AfxEndThread

如何启动线程

  • AfxBeginThread
指针则指向新建的线程对象或 NULL。
CWinThread* AfxBeginThread(
   AFX_THREADPROC pfnThreadProc,//指向工作线程的控件函数。 不能为 NULL。 必须对此函数声明如下:
								//UINT __cdecl MyControllingFunction( LPVOID pParam );
   LPVOID pParam,               //传递到线程的参数(void *)。
   int nPriority = THREAD_PRIORITY_NORMAL,//线程优先级
   UINT nStackSize = 0,			//以字节为单位指定新线程的堆栈大小。 如果为 0,堆栈大小默认与创建线程的堆栈大						
   							    //小相同。
   DWORD dwCreateFlags = 0,		
   //指定一个额外的控制线程创建的标志。 此标志可以包含两个值之一:
   //CREATE_SUSPENDED   开始挂起计数为 1 的线程。 如果要在线程开始运行之前初始化 CWinThread 对象的任何成员数
   //据,如 m_bAutoDelete 或您的派生类的任何成员,请使用 CREATE_SUSPENDED。 完成初始化后,使用 
   //CWinThread::ResumeThread 使线程开始运行。 直到调用 CWinThread::ResumeThread,线程才会执行。
   //0  创建后立即启动线程。
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL //指向安全特性结构,此结构为线程指定安全特性。
);
CWinThread* AfxBeginThread(
   CRuntimeClass* pThreadClass,//从 CWinThread 派生的对象的 RUNTIME_CLASS。
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize = 0,
   DWORD dwCreateFlags = 0,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL 
);
----------------------------------------
AfxBeginThread 的第一个构造函数创建辅助线程。
第二个构造函数创建一个可用作用户界面线程或辅助线程。
AfxBeginThread 可创建新的 CWinThread 对象,调用其 CreateThread 函数以开始执行线程,然后将指针返回到线程。
在整个过程中进行检查,确保假如创建过程的任何部分出现故障,所有对象都能被正确地解除分配。
若想关闭线程,请从线程内调用 AfxEndThread,或从辅助线程的控制函数返回。

例如

CWinThread *threadTest= AfxBeginThread(MemoryDraw, Param,THREAD_PRIORITY_NORMAL);
  • _beginthreadex
在这里插入代码片

如何结束线程

  • 通过消息

如果你的线程是从CWinThread继承出来的,结束自己就用AfxEndThread,如果是外部调用的话,可以用PostThreadMessage(m_nThreadID, WM_QUIT,0,0);给这个线程发送消息,线程就会结束的,其中的m_nThreadID是线程ID。
线程的ID可以这样得到

private:
    DWORD  h_MemoryDraw;//定义变量

h_MemoryDraw = AfxBeginThread(MemoryDraw, Param)->m_nThreadID;
  • 通过事件CEvent
    在线程中不断循环判断运行条件
HANDLE working=CreateEvent(NULL,TRUE,TRUE,NULL);
....
while (WAIT_OBJECT_0==WaitForSingleObject(working,0))
{
.....
}

需要结束线程时只需让线程的循环结束,线程就可退出结束了.
ResetEvent(working);

  • 线程内部调用 AfxEndThread
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值