CMultiLock类没有基类。
CMultiLock类的对象代表多线程程序中控制资源访问的访问控制机制。若为了使用同步类CSemaphore, CMutex, CCriticalSection和CEvent,可以创建CMultiLock或CSingleLock对象以等待或发行同步对象。若在某个特定的时间希望使用多个对象,就请使用CMultiLock。否则,当仅仅在某时需等候某一对象时,请使用CSingleLock。
若要使用CMultiLock 对象,首先要创建希望等待的同步对象的数组。
然后,调用被控制的资源类成员函数内的CMultiLock对象的构造函数。其后调用Lock成员函数来决定资源是否为有效资源(被标记)。若有,就继续进行该成员函数的操作。否则,要么等待一定的时间,等资源被释放,要么返回失败。在资源完全使用后,要么当再一次使用CMultiLock对象调用Unlock函数,要么允许销毁CMultiLock对象。
CMultiLock对象在线程有大量响应的CEvent对象时非常有用。首先创建一个包含所有CEvent指针的数组,然后调用Lock函数。这将导致线程等待到某个事件被标记。
如果要了解有关如何使用CMultiLock对象的更多信息,请参阅联机文档“Visual C++程序员指南”中的“多线程:如何使用同步类”。
#include <afxmt.h>
CMultiLock类的成员
构造函数
CMultiLock | 构造一个CMultiLock对象 |
IsLocked | 决定数组中指定的同步对象是否被封锁 |
Lock | 等待同步对象数组 |
Unlock | 释放所有的被控制的同步对象 |
CMultiLock::CMultiLock
CMultiLock( CSyncObject* ppObjects[], DWORD dwCount, BOOL bInitialLock = FALSE );
参数:
ppObjects | 被等待的同步对象的指针数组。它不能为NULL。 |
dwCount | ppObjects中的对象数。它必须大于0。 |
bInitialLock | 指定是否首次企图进入任何被提供的对象。 |
dwObject | 数组中与所要查询状态对象相对应的对象索引。 |
· | WAIT_OBJECT_0和WAIT_OBJECT_0 + (对象数-1)之间。 若bWaitForAll为TRUE,那么所有对象都被标记(有效)。若bWaitForAll为FALSE,那么返回值——WAIT_OBJECT_0 就是对象数组中被标记(或有效)对象的索引。 |
· | WAIT_OBJECT_0 + (对象的个数)。 在线程输出队列中dwWakeMask 指定的事件有效。 |
· | WAIT_ABANDONED_0和WAIT_ABANDONED_0 + (对象数-1)之间。 若bWaitForAll为TRUE,那么所有的对象都被标记,并且至少某一对象为被遗弃的mutex对象。若bWaitForAll为FALSE,那么返回值——WAIT_ABANDONED_0就是对象数组中满足等待条件的被遗弃的mutex对象的索引。 |
· | WAIT_TIMEOUT 等待失败,超过dwTimeOut指定的时间。 |
dwTimeOut | 指定等待同步对象有效(被标记)的时间。若该值为INFINITE,那么Lock函数在返回前一直等到对象被标记。 |
bWaitForAll | 指定返回前是否正在等待的所有对象都必须同时被标记。若该值为FALSE,那么Lock函数将返回任一被标记的被等待的对象。 |
dwWakeMask | 指定允许中断等待的其它条件。如果需要该参数有效选择项的完整列表,请参阅“Win32程序员参考”中的MsgWaitForMultipleObjects。 |
lCount | 要释放的参考合计数。该值必须大于0。若指定的总数导致对象数超过其最大值,那么该对象数将不做修改,函数将返回FALSE。 |
lPrevCount | 指向接收同步对象以前数目的变量。若为NULL,则不返回以前的数目。 |
评论