字体
第(3/5)页
关灯
   存书签 书架管理 返回目录
界区对象的指针。

    当速度要求较高,并且进程边界的资源不会被jiāo叉使用的时候,通常采用Critical Section

    替代Mutexes。临界区不是一个核心对象,无法获知进入临界区的线程的状态,如果进入临

    界区的线程处于死锁状态,没有释放临界资源,系统无法获知,而且没有办法释放该临界资

    源。这个缺点在互斥器(Mutex)中得到了弥补。

    (5)CCriticalSection

    CcriticalSection 是临界区在MFC 中的相应的类。它的成员函数如表9-5 所示。

    表9-5 CEvent 类的成员函数

    函数名称 作用

    CCriticalSection 构造函数,构造CCriticalSection 对象

    Lock 进入临界区

    UnLock 离开临界区

    3.事件(Event)

    事件(Event)是由Windows cāo作系统管理的同步对象。可以用于进程或线程的同步。一

    个事件被创建后,只有激发状态和未激发状态两种状态,也称为发信号状态和未发信号状态。

    事件包括手动重置事件和自动重置事件两种类型。手动重置事件被设置为激发状态后,

    会唤醒所有等待的线程,而且一直保持激发状态,直到程序重新把它设置为未激发状态。自

    动重置事件被设置为激发状态后,会唤醒一个等待中的线程,然后自动恢复为未激发状态。

    所以用自动重置事件来同步两个线程比较理想。

    (1)CreateEvent

    通过调用Win32API 函数CreateEvent 来创建或者打开一个事件对象。如果调用成功,返

    回事件对象的句柄,否则返回空。它的函数原型如下:

    HANDLE CreateEvent(

    LPSECURITY_ATTRIBUTES lpEventAttributes,

    BOOL bManualReset,

    BOOL bInitialState,

    LPCTSTR lpNcom

    );

    函数中主要参数的意义如下。

    ? lpEventAttributes:指向SECURITY_ATTRIBUTES 结构的指针,它决定返回的句柄是

    否可以被子进程继承。如果lpEventAttributes 为空,则不能被继承。

    枫叶文学网www.fywxw.com

    Visual C++ 6.0 程序设计从入门到精通

    ·238·

    ? bManualReset:指定创建一个手动重置事件或自动重置事件。如果为前者,必须调用

    ResetEvent 手动设定状态为非激活状态。否则,当一个等待线程被释放后,系统会自

    动设定对象的状态为非激活状态。

    ? bInitialState:指定对象的初始状态。

    ? lpNcom:事件对象的名称。

    (2)OpenEvent

    函数OpenEvent 可以打开一个存在的事件对象,允许多个进程打开同一个对象。如果调

    用成功,返回事件对象的句柄。否则返回空。它的函数原型如下:

    HANDLE OpenEvent
上一页 目录 下一页