Delphi实现进程同步运行

http://blog.sina.com.cn/s/blog_717e88030100ti76.html

 (2011-09-26 23:15:16)
标签: 

delphi

 

同步

 

运行

 

多开

 

进程

 

杂谈

分类: 大实验室

 因为一个小程序的需要,写了这么一段小代码,完美实现进程同步。

  Procedure CreadMax;
  var
    FHandle: LongWORD;
  begin
        FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, $ffff, 'ZMRKEY');
        if FHandle = 0 then
        begin
          if GetLastError = ERROR_ALREADY_EXISTS then
          begin
            FHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'ZMRKEY');
            if FHandle = 0 then Exit;
            DLLData := MapViewOfFile(FHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
            if DLLData = nil then CloseHandle(FHandle);
            DllData.i := 0;
          end;
        end
        else
        begin
            FHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'ZMRKEY');
            if FHandle = 0 then Exit;
            DLLData := MapViewOfFile(FHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
            if DLLData = nil then CloseHandle(FHandle);
            DllData.i := DllData.i + 1;;
        end;

  end;

 

//使用方法

  CreadMax;
  while DllData.i < 5 do
  begin
    Sleep(100);
    if DllData.i > 5 then
    begin
     ExitProcess(0);
    end;
    WinExec(PChar(ParamStr(0)),1);
  end;

//DllData.i就是这个exe第几个运行了

//用完了之后不要忘了用UnmapViewOfFile(DllData)卸载共享内存哦!