Delphi Thread CreateMutex: 여러 프로그램의 인 스 턴 스 가 동시에 나타 나 지 않도록 합 니 다 (서버)

windows 는 다 중 사용자 다 중 태 스 크 운영 체제 로 여러 프로그램 이 동시에 실행 되 는 것 을 지원 합 니 다. 프로그램 이 한 개 이상 을 동시에 실행 시 키 고 싶 지 않다 면,
그럼 어떻게 해 야 되 지?본 고 는 사용자 가 여러 프로그램 을 동시에 실행 하지 않도록 하 는 예 를 소개 할 것 이다.
필요 한 함수 CreateMutex, CreateMutex 함 수 는 windows 에서 자주 사용 되 지 않 는 함수 입 니 다.
이 함수 대상 은 시스템 에 하나의 인 스 턴 스 만 존재 하고 상호 배척 체 만 존재 합 니 다.
그래서 이런 특성 을 이용 하여 우리 의 요 구 를 간단하게 실현 했다.
[함수 원래 성명]:
 
function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle; 
function CreateMutex(lpMutexAttributes: PSecurityAttributes; bInitialOwner: BOOL; lpName: PChar): THandle;

【 매개 변수 설명 】:
lpMutex Attributes 는 SECURITYATTRIBUTES 구조 형식의 지침 은 NULL 로 설정 할 수 있 습 니 다.
bInitialOwner 가 상호 배척 체 를 초기 화 할 지 여부 입 니 다.
lpName 상호 배척 체 대상 의 이름 입 니 다.
함수 가 상호 배척 체 핸들 을 되 돌려 줍 니 다.
프로그램 이 실 행 될 때 대상 을 만 듭 니 다. 대상 이 이미 존재 한다 면 프로그램 이 실행 되 었 음 을 나타 냅 니 다.
[실현 과정 은 다음 과 같다]:
새 프로젝트 를 만 듭 니 다. 창 은 분명히 Form 1 입 니 다.
Button 단추 이름 을 Button 1 로 추가 합 니 다.
더 블 버튼 추가 코드
 
procedure TForm1.Button1Click(Sender: TObject); 
var 
  hw : HWND; 
  gt : Integer; 
begin 
  Application.Initialize; 
  Application.Title := 'runmyfile'; 

  hw := CreateMutex(nil,False,'runmyfile'); {       } 
  gt := GetLastError; 

  if gt <> Error_ALREADY_EXISTS then     {           } 
  begin 
    Application.CreateForm(TForm1,Form1); {    } 
    Application.Run; 
  end 
  else 
  begin 
    Application.MessageBox('      ','  ',MB_OK); 
    Application.Terminate; 
    ReleaseMutex(hw);{     } 
  end;     
end; 

ReleaseMutex 함수 의 기능 은 상호 배척 대상 을 방출 하 는 것 입 니 다.
BOOL WIANPI ReleaseMutex(
HANDLE hMutex
);
BOOL, TRUE 는 성공 을, FALSE 는 실 패 를 각각 나 타 냈 다.
 GetLastError; 그것 은 운영 체제 가 준 힌트 를 되 돌려 줄 수 있 습 니 다. - ErrorAlready_Exists:

좋은 웹페이지 즐겨찾기