關於電腦上的知識, 如 Linux, Perl, C/C++, C# …

2009年9月22日 星期二

用system()呼叫外部程式如何限制執行時間

問題來源:

問題內容:
我在windows下用C語言的system("lapurw.exe") ;的指令執行lapur.exe
那現在如果我希望此程式執行超過一定的時間(例如30秒)就自動停止執行(關掉其DOS視窗),並回到原來的程式繼續執行迴圈
請問可以用什麼方法達成?

有看到人家說用CreateProcess或是multithread 和計時器
但是我是初學者 查很久也搞不清楚那要怎麼用T^T
希望可以寫出完整的指令+程式碼
請教教我 謝謝!!!!

問題答案:
#include 

int STDCALL

WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
{
STARTUPINFO t_StartupInfo = {0};
PROCESS_INFORMATION t_ProcessInformation = {0};
t_StartupInfo.cb = sizeof(t_StartupInfo);
char sCmd[] = "ping 127.0.0.1 -n 21"; //執行 ping 21次 大約 20 秒

BOOL bSuccess = CreateProcess(NULL, sCmd, NULL, NULL,
TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL,
&t_StartupInfo, &t_ProcessInformation);

if (bSuccess)
{

DWORD dwRect = WaitForSingleObject(t_ProcessInformation.hProcess, 5 * 1000); //等 5 秒
switch (dwRect)
{
case WAIT_OBJECT_0: //執行的命令正常結束
break;
case WAIT_TIMEOUT: //超過時間仍未結束時,強制結束
TerminateProcess(t_ProcessInformation.hProcess, 0);
break;
}
}
CloseHandle(t_ProcessInformation.hThread);
CloseHandle(t_ProcessInformation.hProcess);
return 0;
}



沒有留言:

張貼留言

LinkWithin

Blog Widget by LinkWithin