createmutex原型_c语言mutex_createmutex(20)

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

end;

procedureTForm1.FormDestroy(Sender:TObject);

begin

CloseHandle(HSem);//销毁信号量

end;

procedureTForm1.Button1Click(Sender:TObject);

var

index:Integer;

begin

forindex:=0to10do

TMyThread.Create;

end;

(2).使用TSemaphore类

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

要先usesSyncObjs。它对上面的API函数进行了封装,简化并方便了在Delphi中的使

用。

其有三个版本的构造器,简单执行TSemaphore.Create就可实例化一个对象:

constructorCreate(UseCOMWait:Boolean=False);overload;

constructorCreate(SemaphoreAttributes:PSecurityAttributes;AInitialCount:Integer;

AMaximumCount:Integer;constName:string;UseCOMWait:Boolean=False);overload;

constructorCreate(DesiredAccess:LongWord;InheritHandle:Boolean;

constName:string;UseCOMWait:Boolean=False);overload;

参数参见上面介绍。

TSemaphore.Acquire等效于WaitForSingleObject(semaphorehandle,INFINITE),其实际上就

是执行THandleObject.WaitFor(INFINITE)。或者使用WaitFor()和WaitForMultiple()函数,

这两个函数可以设置等待的时间或等待多个事件对象。

TSemaphore.Release有两个版本,声明如下:

procedureRelease;override;overload;

functionRelease(AReleaseCount:Integer):Integer;overload;reintroduce;

第一个版本实际执行ReleaseSemaphore(FHandle,1,nil)

第二个版本AReleaseCount参数表示释放时增加的信号量计数值,返回值是释放前的信号

量计数值。实际执行ReleaseSemaphore(FHandle,AReleaseCount,@Result),其中@Result是

10

指向Release函数返回值Integer类型的指针。如果要指定增加计数值应使用第二个版本。

4.Event事件

事件(Event)与Delphi中的事件有所不同。从本质上说,Event其实相当于一个全局的布

尔变量。它有两个赋值操作:SetEvent和ResetEvent,相当于把它设置为True或False。

而检查它的值是通过WaitForSingleObject()(或其它WaitFor函数)操作进行。SetEvent和

ResetEvent操作是原语操作,所以Event可以实现一般布尔变量不能实现的在多线程中的

应用。

当Event从Reset状态向Set状态转换时,唤醒其它挂起的线程,这就是它为什么叫

Event的原因。所谓“事件”就是指“状态的转换”。通过Event可以程间传递这种“状


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

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

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