您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
WIN32多线程程序设计学习笔记(第四章 下 第五章)
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 11:28:25

WIN32多线程程序设计学习笔记(第四章 下 第五章)

 

终于又看<<WIN32多线程程序设计>>了;开卷有益,今天看了第四章后半部分,感觉颇有收获;以前对EVENT这个核心对象,用起来总是心中没底,看了EVENT的介绍也是似懂非懂的。哈!今天看了以后,真有神助,我觉得应该是搞懂了(自以为事J)。仔细想想,应该是记笔记的功劳,用脑筋写过的东西还真是不容易忘记咧!!!不但印象深刻,而且助我理解了EVENT。

 

好了,闲话少说,进入正题吧!

从第三章以来,每一章都必不可少的用到了一个重要的函数,知道是什么吗?

――――WaitFor…. ()系列

//快速复习

判断一个线程是否结束:WaitForSingleObject ( HANDLE hthred …. );

判断是否能够进入关键区域:WaitForSingleObject ( hMutex….) ;

 

Wait….()会在核心对象被激发时返回,各种核心对象对激发的定义不甚相同,对于hthred而言,线程结束,意味着核心对象被激发;对于hMutex而言, hMutex不再被其它任何线程使用,意味着核心对象被激发。反正对于各种核心对象而言,一定是有某种场景的出现使得核心对象被激发,除了EVENT这个核心对象。

 

对于EVENT这个核心对象而言,它的激发状态完全由程序来控制,也就是说,由自己来控制EVENT的激发或未激发状态( 通过SetEvent() , ResetEvent() )。当线程1因调用Wait…(hEvent)而被阻塞后,一定是某个线程调用了SetEvent( hEvent )使hEvent被设为激发状态,从而使线程1被解除阻塞继续向下运行,具体的运用参见下表:

 

函数

EVENT对象[Manual方式产生]

EVENT对象[Auto方式产生]

Wait…()

当EVENT对象变为激发状态(使得因调用Wait…()而等待的线程被唤醒)之后,不会被重置为非激发状态(必须调用ResetEvent())

当EVENT对象变为激发状态(使得因调用Wait…()而等待的线程被唤醒)之后,自动重置为非激发状态

SetEvent()

把EVENT对象设为激发状态

把EVENT对象设为激发状态

ResetEvent()

把EVENT对象设为非激发状态

把EVENT对象设为非激发状态

PulseEvent()

把EVENT对象设为激发状态,唤醒“所有”等待中的线程,然后把EVENT对象设为非激发状态

把EVENT对象设为激发状态,唤醒“一个”等待中的线程,然后把EVENT对象设为非激发状态

[使用CreateEvent () API函数构造EVENT核心对象,CreateEvent ()的第二个参数决定了产生的EVENT对象是Manual(手工)方式还是Auto(自动)方式;第三个参数决定了决定了产生的EVENT对象初始状态是激发还是未激发]

 

EVENT核心对象的不同的状态(初始状态是激发还是未激发)及不同的类型(Manual[手工]方式还是Auto[自动]),与之对应的处

[1] [2] [3] [4] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号