createmutex原型_c语言mutex_createmutex(5)

电脑杂谈  发布时间:2017-02-17 02:01:51  来源:网络整理

WAIT_TIMEOUT等待的时间已过,对象仍然是非发信号状态

WAIT_FAILED语句出错

WaitForMultipleObjects()函数的使用:

WaitForMultipleObjects()与WaitForSingleObject()类似,只是它要么等待指定列表(由

lpHandles指定)中若干个互斥对象(由nCount决定)都变为有信号,要么等待一个列表

(由lpHandles指定)中的一个对象变为有信号(由bWaitAll决定)。该函数声明如下:

functionWaitForMultipleObjects(nCount:DWORD;lpHandles:PWOHandleArray;bWaitAll:

BOOL;dwMilliseconds:DWORD):DWORD;stdcall;

nCount参数表示句柄的数量,最大值为MAXIMUM_WAIT_OECTS(64),lpHandles参数

是指向句柄数组的指针,lpHandles类型可以为(Event,Mutex,Process,Thread,Semaphore)

数组,bWaitAll参数表示等待的类型,如果为True则等待所有信号量有效再往下执行,设

为False则当有其中一个信号量有效时就向下执行,dwMilliseconds参数表示超时时间,超

时后向下继续执行。

注意:除WaitForSingleObject()和WaitForMultipleObjects()外,你还可以使用

MsgWaitForMultipleObjects()函数。该函数的详细情况请看Win32API联机文档。

WaitForSingleObject()不仅仅用于互斥,也用于信号量或事件,因此这里用词为“事件对象”

而非互斥对象。在互斥例中,可以用互斥对象代替事件对象,同样,在信号量例中,也能以

信号量对象代替事件对象。createmutex

再次提示,当一个互斥对象不再被一个线程所拥有,它就处于发信号状态。此时首先调用

WaitForSingleObject()函数的线程就成为该互斥对象的拥有者,此互斥对象设为无信号状

态。当线程调用ReleaseMutex()函数并传递一个互斥对象的句柄作为参数时,这种拥有关

系就被解除,互斥对象重新进入发信号状态。ReleaseMutex()声明如下:

functionReleaseMutex(hMutex:THandle):BOOL;stdcall;

进程间需要同步时,只需要执行CreateMutex()建立一个互斥对象,需要同步的时候只需

要WaitForSingleObject(mutexhandle,INFINITE),释放时只需要ReleaseMutex(mutexhandle)

即可。

例:

//先在主线程中创建互斥对象

var

hMutex:THandle=0;//定义一个句柄

...

hMutex:=CreateMutex(nil,False,nil);//创建互斥对象,并返回其句柄

//在子线程的Execute方法中加入以下代码

WaitForSingleObject(hMutex,INFINITE);//互斥对象处于发信号状态时进入同步区,否则等待

...

ReleaseMutex(hMutex);

//最后记得要在主线程中释放互斥对象

CloseHandle(hMutex);//关闭句柄

(2).使用TMutex类

TMutex是在SyncObjs单元中定义的类,其是ThandleObject类的子类,要使用它需要先


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-32871-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...