2017-10-09 144 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

相关问题