delphi 利用互斥对象只运行一次程序
(2007-09-09 23:52:09) 转载 标签: 分类: delphi
it/科技
开发过多线程
软件的可能都使用过互斥对象,它常被用做线程间同步的技术手 段。互斥对象把第一次建立它的程序作为主程序,这样只用检测互斥对象是否已 经有主程序就判断
程序是否已经运行过,这里需要涉及到一个 api 函数: WaitForSingleObject,该函数的第一个参数为用以检测的互斥对象,第 2 个参 WaitForSingleObject 数的表示函数返回结果前的滞留时间,如果改函数返回 wait_TimeOut 就表明互 斥对象已经有了一个主程序。 注意:以下的代码都出现在工程文件中,而不是单元文件中。打开方法 project-->view source uses Windows,Forms, renderagentunit in 'renderagentunit.pas' {lomainForm}; {$R *.res} var myMutex:HWND; begin //CreateMutex 建立互斥对象,并且给互斥对象起一个唯一的名字。 myMutex:=CreateMutex(nil,false,'loOneCopy'); //程序没有被运行过 if WaitForSingleObject(myMutex,0)<>wait_TimeOut then begin Application.Initialize; Application.CreateForm(TlomainForm, lomainForm); Application.Run; end; end. [注释]: 当应用程序第一次运行的时候,在应用程序中会建立一个互斥对象,名称为 'hkOneCopy',然后判断
系统中有没有这个互斥对象,如果没有则初始化应用程 序。需要在 uses 中加 windows。