表示默认的安全属性。bInitalOwner参数表示创建互斥的线程是否要成为此互斥对象的初始
拥有者,当此参数为False时,表示互斥对象没有拥有者。lpName参数指定互斥对象的名
称,该名称是大小写区分的,设为nil表示无命名,如果参数不是设为nil,函数会搜索
是否有同名的互斥对象存在,如果有,函数就会返回同名互斥对象的句柄。否则,就新创建
一个互斥对象并返回其句柄。
当使用完互斥时,应当调用CloseHandle()来关闭它。
WaitForSingleObject()函数的使用:
程中使用WaitForSingleObject()来防止其他线程进入同步区域的代码。第一个调用
WaitForSingleObject()函数的线程会将事件对象(不限于互斥对象)设为无信号状态,其它线
程调用WaitForSingleObject()函数时会检查事件对象是否处于发信号状态,这时状态处于
无信号状态,所以其它线程会挂起等待而不执行同步区域中的代码。当第一个线程执行完同
步代码后会释放事件对象,事件对象重新进入发信号状态并唤醒等待线程,其它线程会再次
将事件对象设为无信号状态,防止另外的线程执行同步代码。这就实现了线程同步。
此函数声明如下:
functionWaitForSingleObject(hHandle:THandle;dwMilliseconds:DWORD):DWORD;stdcall;
这个函数可以使当前线程在dwMilliseconds参数指定的时间内等待事件对象信号,直到
hHandle参数指定的事件对象进入发信号状态为止。当一个事件对象不再被线程拥有时,它
就进入发信号状态。当一个进程要终止时,它就进入发信号状态。dwMilliseconds参数设为
0,这意味着只检查hHandle参数指定的事件对象是否处于发信号状态,而后立即返回该
信号状态。dwMilliseconds参数设为INFINITE,表示如果信号不出现将一直等下去。
WaitForSingleObject()在一个指定时间(dwMilliseconds)内等待一个事件对象变为有信号,
在此时间内,若等待的事件对象一直是无信号的,则调用线程将处于挂起状态,否则继续执
行。超过此时间后,线程继续运行。
WaitForSingleObject()函数返回值及含义:
WAIT_ABANDONED指定的对象是一个事件对象,该对象没有被拥有线程程结束前释
放。此时就称事件对象被抛弃。互斥对象的所有权被同意授予调用该函数的线程。互斥对象
被设置成为无信号状态
WAIT_OECT_0指定的对象处于发信号状态
WAIT_TIMEOUT等待的时间已过,对象仍然是非发信号状态
WAIT_FAILED语句出错
WaitForMultipleObjects()函数的使用:
WaitForMultipleObjects()与WaitForSingleObject()类似,只是它要么等待指定列表(由
lpHandles指定)中若干个互斥对象(由nCount决定)都变为有信号,要么等待一个列表
6
(由lpHandles指定)中的一个对象变为有信号(由bWaitAll决定)。该函数声明如下:
functionWaitForMultipleObjects(nCount:DWORD;lpHandles:PWOHandleArray;bWaitAll:
BOOL;dwMilliseconds:DWORD):DWORD;stdcall;
nCount参数表示句柄的数量,最大值为MAXIMUM_WAIT_OECTS(64),lpHandles参数
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32871-16.html
北洋海军除定远镇远外