MFC多线程技术

MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。

工作者线程没笑消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程之外的用户输入,响应用户及系统产生的事件和消息等。但对于Win32的API编程而言,这两种编程是没有区别的,他们都只需要线程的启动地址即可启动线程来执行任务。

在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。这两种函数的重载和原型分别说明如下:

(1)工作者线程

CWndThread *AfxBeginThread(AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
UINT nPriority=THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

(2)IU线程(用户界面线程)

CWndThread *AfxBeginThread(CRuntimeClass *pThreadClass,
int nPriority=THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

AfxBeginThread()创建线程的流程不论哪个AfxBeginThread(),首先都是创建MFC线程对象,然后创建Win32线程对象。

AfxBeginThread创建线程的流程图

MFC线程技术剖析

MFC的核心类库中有一个名为CWinThread的类,这个类在MFC的底层机理中占举足轻重的地位。

MFC应用程序

线程状态用类_AFX_THREAD_STATE描述,模块状态用类_AFX_MODULE_STATE描述,模块-线程状态用类_AFX_MODULE_THREAD_STATE描述。这些类从类CNoTrackObject派生。进程状态用类_AFX_BASE_MODULE_STATE描述,从模块状态_AFX_MODULE_STATE派生。进程状态是一个可以独立执行的MFC应用程序的模块状态。还有其他状态如DLL的模块状态等也从模块状态类_AFX_MODULE_STATE派生。

MFC状态类的层次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MFC(Microsoft Foundation Classes)是微软开发的一种应用程序框架,它可以简化Windows应用程序的开发。多线程指的是在一个程序中同时运行多个线程,每个线程可以独立执行不同的任务。使用MFC进行多线程编程可以提高程序的性能和响应速度。 在MFC中,我们可以使用CWinThread类来创建和管理线程。首先,我们需要继承CWinThread类并重写其Run函数,在Run函数中编写线程的执行逻辑。然后,通过调用CWinThread的CreateThread函数创建并启动线程。 在多线程编程中,需要特别注意线程之间的同步和互斥。MFC提供了一些同步对象,例如CSemaphore、CCriticalSection等,用于实现线程之间的同步操作。我们可以使用这些同步对象来避免多个线程同时访问共享资源,从而避免发生竞态条件和数据不一致问题。 当然,在多线程编程中,还需要注意避免产生死锁和线程间的资源竞争问题。为了避免死锁,我们可以遵循一些原则,例如按照相同的顺序获取锁、避免嵌套锁等。对于资源竞争问题,我们可以使用互斥锁等同步机制来保证共享资源的正确访问。 总而言之,MFC多线程编程是利用MFC框架进行多线程应用程序的开发。通过继承和重写CWinThread类,我们可以创建和管理多个线程,并使用MFC提供的同步对象来实现线程之间的同步。同时,需要注意避免死锁和资源竞争问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值