2017-10-09 1 views
0

그냥 깨끗이하기 위해서입니다 : im new in C++.프로그램을 닫기 전에 잠깐 기다려주십시오. C++

안녕하세요, x 초 후에 어떻게 프로그램을 닫을 수 있습니까?

if (LoadProcess("test.exe")) 
{ 
    printf("Please close test.exe."); 
    Sleep(20); 
    exit(1); 
} 

로드 프로세스 코드 :

bool manualmap::LoadProcess(const char* procName) 
{ 
    HANDLE hProcessId = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

    PROCESSENTRY32 pEntry; 
    pEntry.dwSize = sizeof(pEntry); 

    do 
    { 
     if (!strcmp(pEntry.szExeFile, procName)) 
     { 
      dwProcessId = pEntry.th32ProcessID; 
      CloseHandle(hProcessId); 

      hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwProcessId); 
      return (processOk = true); 
     } 

    } while (Process32Next(hProcessId, &pEntry)); 

    return (processOk = false); 
} 
+1

'수면 (X * 1000)'수면'()가'밀리 초 인수를합니다. –

+1

코드를 사용해 본 경험이 있다면 무엇을하셨습니까? – Steve

+0

** 운영체제 **입니다. Linux에서 코드가 작동하지 않습니다. 귀하의 질문에 약간의 추가 태그가없고 일부 [MCVE] (http://stackoverflow.com/help/mcve) –

답변

8

기능 sleep 표준에없는

프로세스가 자동 절전 및 자동 종료에게 그를 기다릴 해달라고, 내가 지금까지 시도 이잖아하지만, C++이므로 winapi reference에서 무엇을하는지 확인해야합니다.

표준 C++를 사용하는 경우 필요한 기능은 std::this_thread::sleep_for입니다.

접미어는 20s와 20000ms를 모두 전달할 수 있습니다. 접미사는 컴파일러에게 어떤 단위인지 의미합니다. (네임 스페이스를 사용하여 표준에서 접미사 : chrono_literals) - MSalters

+0

정말 고마워요! – ReahLy

+1

이 질문은 "winapi"라는 태그가 붙어 있으므로 다른 방법이 있더라도 실제로'Sleep()'을 사용하면 실제로 sleep을 수행하는 것이 적절합니다. –

+2

'20s'와 '20000ms'를 모두 전달할 수 있다는 점에 유의하십시오. 접미사는 컴파일러에게 어떤 단위를 의미하는지 알려줍니다. ('namespace std :: chrono_literals'의 접미사) – MSalters

0

이 출력 후 줄 바꿈을 추가

printf("Please close test.exe.\n"); 
           ^^ 
+0

그러면 출력이 변경됩니다. 아마도'fflush'를 사용하는 것이 더 좋을 것입니다 –

+2

기다려요 ...이 댓글입니까? 또는 개행은 코드가 어떻게 기다리는 지 (또는 변경되지 않음) 실제로 변경됩니까? – TobiMcNamobi

+1

@TobiMcNamobi : 대기 자체는 변경되지 않지만 즉시 문을 인쇄하지 않습니다. 버퍼 된'printf'는'exit' 문까지 내부 버퍼에 부분 라인을 유지했을 가능성이 큽니다. – MSalters

관련 문제