2017-10-09 98 views
0

只是要乾淨:即時通訊新的C++。在關閉程序之前等待x秒鐘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,後綴告訴編譯器您的意思。 (後綴使用空間std :: chrono_literals) - MSalters

+0

非常感謝! – ReahLy

+1

這個問題被標記爲「winapi」,所以使用Sleep()似乎完全適合實際執行睡眠,即使有其他方法可以做到這一點。 –

+2

請注意,您可以同時傳遞'20s'和'20000ms',後綴告訴編譯器您的意思。 (後綴來自'using namespace std :: chrono_literals') – MSalters

0

添加一個換行符你的輸出後:

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

這改變了輸出。也許使用'fflush'會更好 –

+2

等等......這是一條評論嗎?或者新行確實會改變代碼如何等待(或不)? – TobiMcNamobi

+1

@TobiMcNamobi:它不改變等待本身,但它立即打印語句。很可能緩衝的'printf'只是將部分行保留在內部緩衝區中,直到'exit'語句。 – MSalters

相關問題