createmutex原型_c语言mutex_createmutex(17)

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

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

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

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

时后向下继续执行。

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

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

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

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

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

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

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类的子类,要使用它需要先

usesSyncObjs。它对上面的那些互斥操作API函数进行了封装,简化并方便了在Delphi

中的使用。

使用前先实例化TMutex类,其有多个重载的构造函数。声明如下:

7

constructorCreate(UseCOMWait:Boolean=False);overload;

constructorCreate(MutexAttributes:PSecurityAttributes;InitialOwner:Boolean;constName:

string;UseCOMWait:Boolean=False);overload;

constructorCreate(DesiredAccess:LongWord;InheritHandle:Boolean;constName:string;

UseCOMWait:Boolean=False);overload;

其实简单的直接调用TMutex.Create就可以返回一个TMutex对象。


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

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

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