createmutex原型_c语言mutex_createmutex(9)

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

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

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

4.Event事件

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

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

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

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

应用。

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

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

态转换”信息。所以其本质是用来通知某事已经发生的信号,在这里可用来表示共享资源已

经在使用或已经使用完的信号。

(1).使用CreateEvent()API函数

使用CreateEvent()创建一个事件,声明如下:

functionCreateEvent(lpEventAttributes:PSecurityAttributes;

bManualReset,bInitialState:BOOL;lpName:PWideChar):THandle;stdcall;

其中bManualReset参数代表创建的Event是自动复位还是人工复位,如果设为True表示

人工复位,一旦该Event被设置为有信号,则它一直会等到手动执行ResetEvent()时才会

变为无信号,设为False表示自动复位,Event被设置为有信号时,则当有一个线程执行

WaitForSingleObject()时该Event就会自动复位,变成无信号。bInitialState参数代表事件

的初始状态,设为True,事件创建后为有信号,设为False则为无信号。

不同于互斥或信号量,Event不使用Release相关函数设置相关对象进入发信号状态,而使

用SetEvent()函数,当线程执行完同步代码要从同步区域中离开时应执行该函数,声明如

下:

functionSetEvent(hEvent:THandle):BOOL;stdcall;

当事件创建为人工复位时,程进入同步区域执行同步代码前应执行ResetEvent()函数,

将Event设为无信号。声明如下:

functionResetEvent(hEvent:THandle):BOOL;stdcall;

PulseEvent()是一个比较有意思的方法,正如名字,它使一个Event对象的状态发生一次

脉冲变化,将无信号设为有信号,唤醒等待的线程,再设为无信号,而整个操作是原子的。

对自动复位的Event对象,它仅唤醒第一个等到该事件的线程(如果有的话),而对于人工复

位的Event对象,它唤醒所有等待的线程。声明如下:

functionPulseEvent(hEvent:THandle):BOOL;stdcall;

当使用完事件时,应当调用CloseHandle()来关闭它。

(2).使用TEvent类

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

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


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

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

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