createmutex原型_c语言mutex_createmutex(18)

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

第一个版本将创建一个无名的、使用默认安全属性、创建其的线程非互斥对象的初始拥有者

的TMutex对象,其中的参数UseCOMWait设为True时表示当某个线程阻塞且等待互斥

对象时,任何单线程单元(STA)COM组件调用可以发回到该线程,其默认为False。

第二个版本的MutexAttributes参数通常设为nil表示使用默认的安全属性。InitialOwner参

数表示创建线程是否是互斥对象的初始拥有者。Name参数表示互斥对象的名字,大小写区

分。

第三个版本的DesiredAccess参数表示访问互斥的方式,如果传递的访问方式没有被允许那

么构造函数会失败,其参数可以是下面几个常量的任意组合:

MUTEX_ALL_ACCESS,MUTEX_MODIFY_STATE,SYNCHRONIZE,_DELETE,

READ_CONTROL,WRITE_DAC,WRITE_OWNER。但任何组合必须包含

SYNCHRONIZE访问权。InheritHandle参数表示子进程是否可继承该互斥对象句柄。

TMutex.Acquire等效于WaitForSingleObject(mutexhandle,INFINITE),其实际上就是执行

THandleObject.WaitFor(INFINITE)。

TMutex.Release实际上就是执行ReleaseMutex(mutexhandle)。

TMutex.Acquire只能无限期等待一个互斥对象,要设置等待时间或等待多个互斥对象要使

用TMutex.WaitFor()或TMutex.WaitForMultiple()。

WaitFor()是定义在TMutex的父类ThandleObject中的虚函数,声明如下:

functionWaitFor(Timeout:LongWord):TWaitResult;virtual;

其中返回值枚举型TWaitResult可以指示操作结果,wrSignaled代表信号已set,

wrTimeOut代表超时且信号未set,wrAbandoned代表超时前事件对象被销毁,wrError代

表等待时出错。

WaitForMultiple()是定义在TMutex的父类ThandleObject中的类函数,声明如下:

classfunctionWaitForMultiple(constHandleObjs:THandleObjectArray;Timeout:LongWord;

AAll:Boolean;outSignaledObj:THandleObject;UseCOMWait:Boolean=False;Len:Integer=

0):TWaitResult;

其中HandleObjs参数是包含了要等待的一系列事件对象的数组,AAll参数设为True时,

当所有事件对象都进入发信号状态后该函数调用才会完成,当返回值为wrSignaled且

AAll参数设为False时,第一个发信号的事件对象会被传给SignaledObj参数,Len参数

设置监视事件对象的数量。

注意:WaitFor()和WaitForMultiple()均定义在ThandleObject类中,而ThandleObject类

是TMutex、TSemaphore、TEvent类的父类,所以在描述WaitFor()和WaitForMultiple()

时使用的是事件对象而非互斥对象或信号量对象。

3.Semaphore信号量

另一种使线程同步的技术是使用信号量对象。它是在互斥的基础上建立的,它与互斥相似,


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

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

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