MFC的多线程编程创建

本文主要描述基于MFC的多线程技术中的工作者线程,包括线程的建立、传递参数、互斥对象保护以及线程的销毁。还将探讨线程函数作为类的成员函数的情况。

  首先需要说明的是工作者线程和界面线程的区别,界面线程(UI线程)指的是包含有消息队列的线程,可以使用消息机制相互通信;工作者线程则没有消息队列,能够发送消息,但是不能够处理Windows消息。

  MFC中的建立一个线程的通常使用AfxBeginThread,参考MSDN 使用 C++ 和 MFC 进行多线程编程 ,此函数有两个版本,创建UI线程需要先从CWinThread类派生类,并作为第一个参数传递给AfxBeginThread;创建工作者线程只需要定义线程处理函数并将函数地址作为AfxBeginThread的第一个参数即可。

  工作者线程只允许线程创建时传入一个LPVOID型的指针,需要传入大量参数时可以定义一个结构体,把结构体指针作为参数传入线程函数,线程内部通过强制类型转换得到结构体指针。

  线程的入口函数一定是全局函数或者是静态函数。线程函数作为类的成员函数时,必须声明为静态函数,因为类成员函数在编译时会添加this指针,静态方法属于类本身而不属于某个对象,不分配this指针,可以保证正确传入的LPVOID指针。另外,类的静态方法只能访问类的静态成员变量,在类的方法中创建线程时一般考虑传入this指针,方便其访问类中的成员变量。此时类的对象存在,线程可以通过对象的指针访问类的成员变量以及成员函数。

  注:若在类中声明静态变量,需要在实现文件中初始化,否则链接会出现“无法解析的外部符号”。原因是类中的静态变量只是声明。静态变量属于类本身,不属于任何一个对象,不能在对象构造函数中初始化,一般是在main函数前面采用:

 <数据类型> <类名> :: <静态数据成员名> = <值>

的格式初始化,引用类的静态成员变量是时须按照:

 <类名> :: <静态成员名>

的格式进行引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值