C++课件 第16章 多任务与多线程编程.ppt 立即下载
2024-09-12
约2.3千字
约86页
0
542KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

C++课件 第16章 多任务与多线程编程.ppt

C++课件第16章多任务与多线程编程.ppt

预览

免费试读已结束,剩余 81 页请下载文档后查看

15 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第16章多任务与多线程编程本章主要教学内容第16章多任务与多线程编程16.1程序、进程和线程概述16.1.1多任务、进程和线程一个进程可以有一个或多个线程,其中一个是主线程。16.2线程的种类16.16.1MFC中的线程类16.16.1MFC中的线程类16.16.2用户界面线程(UI)16.16.3工作者线程16.3线程的创建、启动和终止一、AfxBeginThread函数用来创建工作者线程的调用格式:16.函数返回值的说明:CWinThread*pWinThread;
pWinThread=AfxBeginThread(
ControlFunction,
pParam,
THREAD_PRIORTY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);16.3.3线程的终止16.3.3线程的终止16.3.3线程的终止VOIDWINAPIExitProcess(UINTuExitCode);16.4.1线程的运行状态的设置16.4.1线程的运行状态的设置16.4.2线程的优先级16.4.2线程的优先级16.4.2线程的优先级16.4.2线程的优先级16.4.2线程的优先级16.4.2线程的优先级16.4.2线程的优先级16.4.3线程间的通信16.4.3线程间的通信16.4.3线程间的通信16.4.3线程间的通信16.4.3线程间的通信三、使用同步类来实现线程之间的通信和控制
在16.5小节中将详细介绍16.5在VC++环境中使用同步对象16.5在VC++环境中使用同步对象16.5在VC++环境中使用同步对象16.5.1事件对象16.5.1事件对象16.5.1事件对象16.5.1事件对象补充说明:在MFC中,CEvent类对象有两种类型,分别是所谓的手工事件和自动事件。对于自动事件,当其获得信号后,就会释放下一个可用的线程。一个自动CEvent对象在被至少一个线程释放后会自动返回到无信号状态;而人工事件对象获得信号后,释放所有可利用线程,直到调用成员函数ReSetEvent()将其设置为无信号状态时为止。
注意:在创建CEvent类的对象时,默认创建的是自动事件。16.5.1事件对象16.5.1事件对象16.5.1事件对象16.5.1事件对象16.5.1事件对象16.5.1事件对象16.5.1事件对象6.WaitForSingleObject():
其原型声明如下:
DWORDWaitForSingleObject(
HANDLEhHandle,
DWORDdwMilliseconds
)当在线程的执行函数中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。如果经过dwMilliseconds毫秒后,hHandle指向的对象变为有信号状态,则WaitForSingleObject()返回,线程被释放,且返回值为WAIT_TIMEOUT;如果在挂起的dwMilliseconds毫秒内,线程所等待的对象在某一时刻变为有信号,则该函数立即返回,返回值为WAIT_OBJECT_0。参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。CEvent::ResetEvent()把对象设置为无信号状态,程序在WaitForSingleObject(hHandle,INFINITE)处等待。
CEvent::SetEvent()把对象设置为有信号状态,释放等待的线程。
如果CEvent对象为自动事件,则当WaitForSingleObject(hHandle,INFINITE)返回时,自动把CEvent对象重置为无信号状态。B线程在执行到CEvent类成员函数Lock()时将会发生阻塞,而A线程此时则可以在没有B线程干扰的情况下对共享资源进行处理,并在处理完成后通过成员函数SetEvent()向B发出事件,使其被释放,得以对A先前已处理完毕的共享资源进行操作。16.5.2临界区16.5.2临界区16.5.2临界区16.5.2临界区16.5.3互斥量图:互斥内核对象的工作模型16.5.3互斥量16.5.3互斥量16.5.3互斥量16.5.3互斥量16.5.3互斥量16.5.4信号灯一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目,不能在允许其他线程的进入,此时的信号量信号将无法发出。16.5.4信号灯16.5.4信号灯16.5.4信号灯在例子中,开启线程前首先创建了一个初始计数和最大资
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

C++课件 第16章 多任务与多线程编程

文档大小:542KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用