zoukankan      html  css  js  c++  java
  • [delphi]保证程序只运行一个实例

    许多时候我们希望程序只有一个实例在运行,而不是多个实例同时运行。 其实完成这一功能有很多种方法,我把自己知道的几种方法简单介绍一下。


    一  使用全局原子

    program Project1;

    uses
      windows,
      Forms,
      Dialogs,
      Unit1 in 'Unit1.pas' {Form1};

    {$R *.res}

    const
      myatom='我的全局原子方法';
    begin
      if GlobalFindAtom(myatom)=0 then
      begin
        GlobalAddAtom(myatom);
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
        GlobalDeleteAtom(GlobalFindAtom(myatom));
      end
      else
        showmessage('已经有一个实例在运行');
    end.

     

    二 使用互斥对象

    var
      mymutex: THandle;
    begin
      mymutex:=CreateMutex(nil,True,'我的互斥对象');
      if GetLastError<>ERROR_ALREADY_EXISTS then
      begin
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end
      else
        showmessage('已经有一个实例在运行');
    end. 

      

    三 使用FindWindow函数

    var
      myhandle: THandle;
    begin
      myhandle:=FindWindow(nil,'Form1');
      if myhandle=0 then
      begin
        Application.Initialize;
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end
      else
        showmessage('已经有一个实例在运行');
    end.
            在上面介绍的几种方法中用到的 API函数GlobalFindAtom、GlobalAddAtom 、GlobalDeleteAtom、CreateMutex、GetLastError 、FindWindow 在msdn和delphi自带帮助的windows sdk中都有介绍。


     

  • 相关阅读:
    18. 4Sum(双指针)
    17. Letter Combinations of a Phone Number(bfs)
    16. 3Sum Closest(双指针)
    15. 3Sum(字典) (双指针)
    14. Longest Common Prefix(暴力循环)
    8. String to Integer (atoi)
    54. Spiral Matrix(剑指offer--19)
    Baidu 推荐技术平台(offer)
    134. Gas Station(数学定理依赖题)
    187. Repeated DNA Sequences(建立词典,遍历一遍 o(n))
  • 原文地址:https://www.cnblogs.com/huhu0013/p/1814943.html
Copyright © 2011-2022 走看看