createmutex原型_c语言mutex_createmutex(21)

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

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

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

(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中的使用。

TEvent若在多线程环境中可用于与其它线程同步;若在单线程环境中可用于调整响应不同

异步事件(如系统消息或用户动作)的代码段。构造函数如下:

constructorCreate(EventAttributes:PSecurityAttributes;ManualReset:Boolean;

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

11

constructorCreate(UseCOMWait:Boolean=False);overload;

ManualReset参数为是否手工复位,InitialState参数为初始状态。

TEvent.SetEvent()和TEvent.ResetEvent()均无参数。

TEvent类中没有定义与PulseEvent功能一样的方法。

TEvent类同样可以使用WaitFor()和WaitForMultiple()函数。


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

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

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