VC++实现多线程的调度和处理

Windows95 和WindowsNT 操作系统支持多任务调度和处理,基于该功能所提供的多任务空间,程序员可以完全控制应用程序中每一个片段的运行,从而编写高效率的应用程序。

所谓多任务通常包括这样两大类:多进程和多线程。进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。

开发多线程应用程序可以利用32 位Windows 环境提供的Win32 API 接口函数,也可以利用VC++ 中提供的MFC 类库进行开发。多线程编程在这两种方式下原理是一样的,用户可以根据需要选择相应的工具。本文重点讲述用VC++5.0 提供的MFC 类库实现多线程调度与处理的方法以及由线程多任务所引发的同步多任务特征,最后详细解释一个实现多线程的例程。

二基于MFC 的多线程编程

1 MFC 对多线程的支持

MFC 类库提供了多线程编程支持,对于用户编程实现来说更加方便。非常重要的一点就是,在多窗口线程情况下,MFC 直接提供了用户接口线程的设计。

MFC 区分两种类型的线程:辅助线程(Worker Thread)和用户界面线程(UserInterface Thread)。辅助线程没有消息机制,通常用来执行后台计算和维护任务。MFC 为用户界面线程提供消息机制,用来处理用户的输入,响应用户产生的事件和消息。但对于Win32 的API 来说,这两种线程并没有区别,它只需要线程的启动地址以便启动线程执行任务。用户界面线程的一个典型应用就是类CWinApp,大家对类CwinApp 都比较熟悉,它是CWinThread 类的派生类,应用程序的主线程是由它提供,并由它负责处理用户产生的事件和消息。类CwinThread 是用户接口线程的基本类。CWinThread 的对象用以维护特定线程的局部数据。因为处理线程局部数据依赖于类CWinThread,所以所有使用MFC 的线程都必须由MFC 来创建。例如,由run-time 函数_beginthreadex 创建的线程就不能使用任何MFC API。

2 辅助线程和用户界面线程的创建和终止

要创建一个线程,需要调用函数AfxBeginThread。该函数通过参数重载具有两种版本,分别对应辅助线程和用户界面线程。无论是辅助线程还是用户界面线程,都需要指定额外的参数以修改优先级,堆栈大小,创建标志和安全特性等。函数AfxBeginThread 返回指向CWinThread 类对象的指针。

创建助手线程相对简单。只需要两步:实现控制函数和启动线程。它并不必须从CWinThread 派生一个类。简要说明如下:

1. 实现控制函数。控制函数定义该线程。当进入该函数,线程启动;退出时,线程终止。该控制函数声明如下:

UINT MyControllingFunction( LPVOID pParam );

该参数是一个单精度32 位值。该参数接收的值将在线程对象创建时传递给构造函数。控制函数将用某种方式解释该值。可以是数量值,或是指向包括多个参数的结构的指针,甚至可以被忽略。如果该参数是指结构,则不仅可以将数据从调用函数传给线程,也可以从线程回传给调用函数。如果使用这样的结构回传数据,当结果准备好的时候,线程要通知调用函数。当函数结束时,应返回一个UINT 类型的值值,指明结束的原因。通常,返回0 表明成功,其它值分别代表不同的错误。

2. 启动线程。由函数AfxBeginThread 创建并初始化一个CWinThread 类的对象,启动并返回该线程的地址。则线程进入运行状态。

3. 举例说明。下面用简单的代码说明怎样定义一个控制函数以及如何在程序的其它部分使用。

UINT MyThreadProc( LPVOID pParam )
{
CMyObject* pObject = (CMyObject*)pParam;
if (pObject == NULL ||
!pObject- >IsKindOf(RUNTIME_CLASS(CMyObject)))
return -1; //非法参数
……//具体实现内容
return 0; //线程成功结束
}
//在程序中调用线程的函数
……
pNewObject = new CMyObject;
AfxBeginThread(MyThreadProc, pNewObject);
……

时间: 2025-01-26 23:11:19

VC++实现多线程的调度和处理的相关文章

iOS开发多线程篇—多线程简单介绍

一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的串行 1个线程中任务的执

理解iOS多线程应用的开发以及线程的创建方法_IOS

一.进程和线程1.什么是进程   进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程   2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的串行   1个线程

python并发编程之多进程、多线程、异步和协程详解_python

最近学习python并发,于是对多进程.多线程.异步和协程做了个总结.一.多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行.即使是单CPU的计算机,也可以通过不停地在不同线程的指令间切换,从而造成多线程同时运行的效果. 多线程相当于一个并发(concunrrency)系统.并发系统一般同时执行多个任务.如果多个任务可以共享资源,特别是同时写入某个变量的时候,就需要解决同步的问题,比如多线程火车售票系统:两个指令,一个指令检查票是否卖完,

[转载]Linux 线程实现机制分析

  自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的.   一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位.在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开

【笔谈】Github上新鲜出炉的深度学习系统mxnet的中文介绍

凌晨时看到一篇,新鲜出炉的深度学习系统mxnet的文章.关键已经有了中文介绍,译者是muli@cs.cmu.edu,地址在https://github.com/dmlc/mxnet/issues/797. 内容如下: MXNet设计和实现简介 神经网络本质上是一种语言,我们通过它来表达对应用问题的理解.例如我们用卷积层来表达空间相关性,RNN来表达时间连续性.根据问题的复杂性和信息如何从输入到输出一步步提取,我们将不同大小的层按一定原则连接起来.近年来随着数据的激增和计算能力的大幅提升,神经网络

浅谈我对协程的理解

我心中的协程 最近在研究网络服务框架方面的东西,发现了一个神奇的东西-协程. 一句话说明什么是线程:协程是一种用户态的轻量级线程. 一句话并不能完全概括协程的全部,但是起码能让我们对协程这个概念有一个基本的印象. 从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升.server端也在不断的发展变化.如果将程序分为IO密集型应用和CPU密集型应用,二者的server的发展如下: IO密集型应用: 多进程->多线程->事件驱动-

java 线程详解

一.概念 1.1 基本概念 进程是程序执行的一个实例,比如说,10个用户同时执行IE,那么就有10个独立的进程(尽管他们共享同一个可执行代码). 进程的特点,每一个进程都有自己的独立的一块内存空间.一组资源系统.其内部数据和状态都是完全独立的.怎么看待多进程?进程的优点是提高CPU运行效率,在同一时间内执行多个程序,即并发执行.但是从严格上讲,也不是绝对的同一时刻执行多个程序,只不过CPU在执行时通过时间片等调度算法不同进程高速切换.总结来说: 进程由操作系统调度,简单而且稳定 进程之间的隔离性

任务调度系统 xxl-job,新版本 V1.4.0 新特性速览

分布式任务调度系统 xxl-job新版本V1.4.0更新内容: 1.任务依赖: 通过事件触发方式实现, 任务执行成功并回调时会主动触发一次子任务的调度; 2.执行器底层实现代码进行重度重构, 优化底层建表脚本; 3.执行器中任务线程分组逻辑优化: 之前根据执行器JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞.现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离; 4.执行器调度通讯方案优化, 通过Hex + HC实现建议RPC通讯协议, 优化了通讯参

大型银行数据中心用户安全管理

大型银行数据中心IT治理课题组 随着信息技术日新月异,银行业务高度信息化并稳步迈入大数据时代.数据中心作为银行信息化.大数据的核心基础,其IT系统庞杂,多则上千,涉及用户过万.面对如此规模的系统,如何安全高效的管理成为了普遍性难题.为破解用户管控难题,不少银行采取增加人手.加大投入.购置各类管控工具等措施,但多因管控分散.主客体管理割裂.自动化程度不高等问题,导致各类探索和尝试总体效果收效甚微.合规管控差强人意,屡屡坠入安全陷阱,制约了银行信息技术进一步跨越式发展.据Verizon(威瑞森电信公