C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[516] 프로그램이 두번 실행되지 않게... 뮤텍스 쓰기.
김태선 [jsdkts] 9316 읽음    2005-11-23 11:34
보통의 프로젝트.cpp 파일 입니다.
여기에 뮤텍스를 이용해서 두번 실행되지 않게 처리하는 것입니다.
아래 추가된 코드를 보면 쉽게 이해될 것입니다.
뮤텍스를 중복 실행 방지용으로 많이 쓰는데 이 방법이 제일 좋습니다... 흠.. 다 아는 사실이지만 --;

이 팁은 초심자를 위해서.... 올립니다.
//---------------------------------------------------------------------------

#include "PreHeader.h"
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Main.cpp", FormMyMain);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    HANDLE  hMutex = NULL;
    if (ParamCount() < 1)    // 인자를 하나만 쓰면 ParamCount는 1이다.
    {
        // 뮤텍스를 이용한 중복실행 방지. : 가장확실한 방법이다. 아래 스트링에 이 프로그램의 구분명칭을 넣어주면 됩니다.
        hMutex = CreateMutex(NULL, false, "TestProgram by KTS");
        if (GetLastError() == ERROR_ALREADY_EXISTS)
        {  // 아래 몇줄은 이미 떠 있는 프로그램에 또 실행되었다고 통보해주는 것인데 필요없는 경우는 빼도 됩니다.
            HWND  hMe = FindWindow("TFormMyMain", NULL);
            if (hMe)
            {
                // 이미 떠 있는 프로그램을 화면에 나타내게 한다.
                // 만약 숨김 상태라면 나타날 것이고, 나타나 있는 상태라면 변화가 없을 것이다.  즉 프로그램이 또 실행되었다는 신호를 이미 떠 있는 프로그램에 통보해준다.
                SendMessage(hMe, WM_USER + 1, 0, 0);
            }
            ShowMessage("이미 실행되어 있습니다. ^^; ");
            return 0;
        }
    }

    try
    {
        Application->Initialize();
        Application->Title = "네트워크 뷰어";
        Application->CreateForm(__classid(TFormMyMain), &FormMyMain);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }

    // 만일의 사고에 의해 핸들이 닫히지 않아도 프로세스가 종료되면 자연 뮤텍스는 풀린다.
    if (hMutex)
        CloseHandle(hMutex);

    return 0;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
516 프로그램이 두번 실행되지 않게... 뮤텍스 쓰기. 김태선 9316 2005/11/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.