WaitForMultipleObjects和Event配合使用,限制程序运行一个实例
2010-12-24 11:15
731 查看
a.WaitForMultipleObjects:四个参数1。等待内核对象的数目;2。内核对象数组;3。bool类型t为等待数组里面所有的,f为等待数组当中的一个就行,有一个有信号就返回;4。等待Timeout的ms值。
b.CreateEvent:四个参数1。安全选项一般可设为nil;2。是否手动置信号,t在调用waitfor...后内核对象信号状态不变,需用SetEvent/ReSetEvent手动设置,f时waitfor后内核对象变为信号状态;3。设置信号的初始状态,t为有信息f反之;4。可以给内核对象一个名字,也可以设置为nil,当使用到程序限定只有一个运行的时候可以设定名字,这样当已经有相同名字的内核对象存在的时候,就会返回信息ERROR_ALREADY_EXISTS。
c.SetEvent:设为有信号状态。
d.ReSetEvent设为无信号状态。
以上个人理解,具体见MSDN
代码
b.CreateEvent:四个参数1。安全选项一般可设为nil;2。是否手动置信号,t在调用waitfor...后内核对象信号状态不变,需用SetEvent/ReSetEvent手动设置,f时waitfor后内核对象变为信号状态;3。设置信号的初始状态,t为有信息f反之;4。可以给内核对象一个名字,也可以设置为nil,当使用到程序限定只有一个运行的时候可以设定名字,这样当已经有相同名字的内核对象存在的时候,就会返回信息ERROR_ALREADY_EXISTS。
c.SetEvent:设为有信号状态。
d.ReSetEvent设为无信号状态。
以上个人理解,具体见MSDN
代码
program Mutex; uses Forms, Windows, SysUtils, unitMain in 'unitMain.pas' {Form1}; {$R *.res} var hMutex: HWND; begin //hMutex := CreateMutex(nil,True,'MingTest'); hMutex := CreateEvent(nil,False,False,'MingTest'); //MessageBox(0,'Mutex has created!','Mutex!',0); //if hMutex = 0 then //仅CreateMutex用此法可行 if GetLastError = ERROR_ALREADY_EXISTS then begin MessageBox(0,'This program has executed!','Error!',0); Exit; end; Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
相关文章推荐
- 关于 CreateEvent 和WaitForMultipleObjects以及 WaitForSingleObject 等函数的使用实例
- 用ACE的Reactor模式实现网络通讯时,ACE内部用WSAEventSelect函数把网络事件与一个事件对象关联起来,目的是为了后面用WaitForMultipleObjects函数统一处理。
- wince driver中,与中断关联过的EVENT,在IST线程中使用WaitForMultipleObjects fail出错
- 关于WinAPI的WaitForMultipleObjects使用的一个疑惑。
- WaitForMultipleobjects 最大等待对象限制
- 使用WaitForMultipleObjects实现线程间通信
- 使用命名对象防止运行一个程序的多个实例
- 使用WaitForMultipleObjects()修正SwapLists
- WaitForSingleObject和WaitForMultipleObjects使用详解
- WaitForMultipleObjects使用详解
- 使用命名对象防止运行一个程序的多个实例【转】
- 改进的延时函数Delay(使用MsgWaitForMultipleObjects等待消息或超时的到来)
- event与WaitForSingleObject、MsgWaitForMultipleObjects等
- 在Delphi中WaitForMultipleObjects的使用
- WaitForSingleObject和WaitForMultipleObjects使用详解
- 串口 WaitCommEvent 、GetLastError、ClearCommError、WaitForMultipleObjects的联合使用
- 使用命名对象防止运行一个程序的多个实例【转】
- 在Delphi中WaitForMultipleObjects的使用
- WaitForMultipleObjects使用详解
- delphi 中使用WaitForMultipleObjects等待线程执行,再执行后续代码