正文

[ZT]程序只允许运行一个实例的三种例子2007-08-31 17:23:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/otot/29020.html

分享到:

程序只允许运行一个实例的三种例子

一:互斥体

program test;
uses
  Windows;

var
    MutexHandle: Longword;

begin
  if OpenMutex(MUTEX_ALL_ACCESS, FALSE, 'test')=0 then
  begin
    MutexHandle := CreateMutex(nil,TRUE,'test'); //创建一个互斥体,禁止重复运行
    MessageBox(0, pchar('try run another?'), pchar('It Works'), 0);
    ReleaseMutex(MutexHandle);                                //关闭互斥体
  end;
end.

异常退出了,互斥体还不消失

二:全局原子

program test;

Uses Windows

const iAtom=‘SingleApp’;

begin
 if GlobalFindAtom(iAtom)=0 then
 begin
   GlobalAddAtom(iAtom);
        MessageBox(0, pchar('only 1'), pchar('It Works'), 0);
   GlobalDeleteAtom(GlobalFindAtom(iAtom));
 end;
end.

三:内存影射

除了能保存全局变量,还可以唯一标志,但异常退出的话也不能消失

program test;

Uses Windows

var
  hMappingFile: THandle;
  PShared: ^TShared;

begin
     hMappingFile := OpenFileMapping(FILE_MAP_READ, False, 'test');
     if hMappingFile = 0 then
     begin
        hMappingFile := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TShared), 'test');
        PShared := MapViewOfFile(hMappingFile, FILE_MAP_WRITE or FILE_MAP_READ, 0, 0, 0);
        MessageBox(0, pchar('the one'), pchar('It Works'), 0); 
        UnmapViewOfFile(PShared);
       CloseHandle(hMappingFile);
  end;
end.
 

阅读(3839) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册