MFC 多线程编程及多线程的同步
MFC 多线程及线程同步
一、MFC对多线程编程的支持
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。
工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。
在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程和用户界面线程。两种重载函数原型和参数分别说明如下:
(1) CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority = THREAD_PRIORITY_NORMAL,
UNT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);//用于创建工作者线程
PfnThreadProc:指向工作者线程的执行函数的指针,线程函数原型必须声明如下: UINT ExecutingFunction(LPVOID pParam);
请注意,ExecutingFunction()应返回一个UINT类型的值,用以指明该函数结束的原因。一般情况下,返回0表明执行成功。
pParam: 一个32位参数,执行函数将用某种方式解释该值。它可以是数值,或是指向一个结构的指针,甚至可以被忽略; nPriority: 线程的优先级。如果为0,则线程与其父线程具有相同的优先级; nStackSize: 线程为自己分配堆栈的大小,其单位为字节。如果nStackSize被设为0,则线程的堆栈被设置成与父线程堆栈相同大小; dwCreateFlags:如果为0,则线程在创建后立刻开始执行。如果为CREATE_SUSPEND,则线程在创建后立刻被挂起; lpSecurityAttrs:线程的安全属性指针,一般为NULL;
(2) CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UNT nStackSize = 0,
DWORD dwCreateFlags = 0,
MFC多线程同步类的使用_专业资料。本文首先介绍了线程的基本知识,然后讨论了MFC中临界区、互斥量、信号量和事件几种同步对象和同步访问对象的用法,并举出实例以说明...
24 25 26 27 28 29 30 31 1 2 3 4 5 6 7 MFC 多线程及线程同步一、 MFC 对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程...
【译】剖析MFC多线程程序的同步机制【译】剖析MFC多线程程序的同步机制隐藏>> 【译】剖析 MFC 多线程程序的同步机制 原文链接:Synchronization in Multithreaded Appli...
, 2001 如何利用 MFC 实现线程间的同步刘 勇 ( 海军潜艇学院 核潜艇系, 山东 青岛 266071) 摘要: 利用 MFC 提供的几个线程同步对象类, 编写了几个线程安全...
MFC多线程用事件_EVENT_同步的探讨_计算机软件及应用_IT/计算机_专业资料。事件 压盯 是 中多线程程序 同 步的 重要 手茂人 工 重设 事件和 自动 重设事件...
同步多个进程中的线程 MFC 为临界区提供有一个 CCriticalSection 类,使用该类进行线程同步处理是很简单 的。只需在线程函数中用 CCriticalSection 类成员函数 Lock()...
基于MFC的多线程编程技术_工学_高等教育_教育专区。基于 MFC 的多线程编程技术杨...4.2.1 使用临界区对象(criticalSection)进行线程同步 使用临界区对象进行线程...
完成基本控件的使用 2.结合操作系统中信号量与互斥体的概念,在 MFC 中找到对应的相关类 3.设计一个多线程同步的程序, 多线程概述 进程和线程都是操作系统的概念...
在本例中使用了三种MFC类:CMutex、CSingleLock和CMultiLock来同步多个线程对一个数据类的同时访问。 具体步骤: 首先我们要先在线程中确定共享的数据类。在每个类定义...
热门文档