어떻게 하면exe가 하나의 실례만 실행하게 합니까
/*
전역 배척체를 만들고 프로세스가 시작될 때 이 배척체가 생성되었는지 확인하십시오
InitInstance()에
*/
::CreateMutex(NULL, FALSE, "MyAPP");/*상호 배타적 */if(ERROR ALREADY EXISTS = = = = GetLastError() {AfxMessageBox("Already run!") 생성;return FALSE; }
방법2:
한 프로그램이 여러 개의 실례 (프로세스) 를 실행할 수 있는데, 어떻게 하면 한 개의 실례만 실행할 수 있습니까?간단합니다. #pragma 컴파일러 명령을 사용하여 프로세스의 주소 공간에'공유 바이트'를 만들면 목적을 달성할 수 있습니다. 이'공유 바이트'의 데이터는 여러 실행 중인 프로세스에 공유됩니다. 그러면 우리는 변수를 설정합니다. 예를 들어 unsigned gnInstanceCount;실행 실례의 계수로 프로그램 입구에서 g 를 검출합니다nInstanceCount가 1인지, true는 실행을 금지합니다. 그렇지 않으면 gnInstanceCount++ 및 인스턴스를 실행합니다.
구체적으로 다음과 같다.
#pragma data_seg("Shared")//이 공유 섹션은 Shared unsigned g 라고 합니다.nInstanceCount =0;//초기에는 0 #pragma dataseg ()//설정 완료 #pragma comment(linker, "/: SECTION:Shared, RWS
")//이 말은 커넥터에 Shared를 읽기와 쓰기 공유로 설정하는 것을 알려줍니다.
자, 우리 실제적으로 작은 예를 만들어 봅시다.0은 가능하지만 다른 IDE(예: Code Block)에서는 효과가 없는 예가 있습니다.
/********************************************
콘솔 기반
********************************************/
#include
응용 프로그램이 하나의 실례만 실행하도록 하려면, 간단한 방법은 응용 프로그램 클래스에서 상호 배율을 사용하는 것이다. 이것은 VC 아래의 GUIDGEN을 사용할 수 있다.EXE 프로그램 생성.GUIDGEN.EXE는 VC 설치 디렉토리 CommonTools 디렉토리에 있습니다.
인스턴스
1: 대화상자 기반 프로젝트 ex1을 새로 만들고 기본 설정을 사용합니다
2:GUIDGEN으로.EXE는 글로벌 플래그를 생성합니다. #define one은 "글로벌 플래그를 생성합니다."
이 예에서 생성된 명령문은 다음과 같습니다. #define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0x4c, 0x53, 0xf6, 0xe6"
3: 응용 프로그램 클래스 CEx1App::InitInstance()에서 CreateMutex 함수로 상호 배율을 만들고 함수GetLastError()를 호출합니다()
만약 결과가 ERROR 와 같다면ALREADY_EXISTS는 실행 중인 인스턴스가 FALSE로 되돌아왔다는 것을 설명합니다.
4
BOOL CEx1App::InitInstance()
{
handle=::CreateMutex(NULL,FALSE,one);//handle HANDLE
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox(" ");
return FALSE;
}
}
4: CEx1App:::ExitInstance()에서 이 배율 제거int CEx1App::ExitInstance()
{
CloseHandle(handle);
return CWinApp::ExitInstance();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.