Event事件用法与Mutex差不多,但它可以使用:SetEvent(启动运行)ResetEvent(暂停运行)、PulseEvent(执行一次后立即暂停)。
先看一下创建函数:CreateEvent(
lpEventAttributes: PSecurityAttributes;
bManualReset: BOOL;
bInitialState: BOOL;
lpName: PWideChar ): THandle; stdcall;
(lpEventAttributes参数,指向TSecurityAttributes记录的指针,一般可以缺省填入nil值;
bManualReset参数,是否可手动暂停,True为可手动,False为事件对象控制一次后将立即暂停;
bInitialState参数,初始状态,True为事件对象创建后处可运行状态,False为暂停状态;
lpName参数,事件的名称;
返回值为句柄。)
例子代码:
这里要把WaitForSingleObject放到循环中,这样才可以看到在循环的时候暂停。
这里有一个问题,有的时候会出现”Canvas does not allow drawing”错误。应该是多线程访问VCL的原因,不知道怎么修改代码。加上Lock和UnLock,程序却死掉了。
如果要将Event事件像Mutex那样使用,那么程序改成以下这样:
//创建事件中指定不允许手工暂停
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asciil/archive/2009/07/17/4355985.aspx