2014-05-12 38 views
0

嗨我想執行一個系統命令allegro並等待它完成,因爲我需要訪問這個命令生成的文件。我的代碼不起作用。有人可以幫忙嗎?命令沒有運行?它工作,如果我做系統(command.c_str()),但不等。Waitforsingleobject檢測系統命令退出

string command = "start allegro -expert -nographic -s " + fileName1 + " " + boardFile1; 

bool ret; 
bool retwait; 

STARTUPINFO startupinfo; 
GetStartupInfo (&startupinfo); 

PROCESS_INFORMATION pro2info; 

LPTSTR cmdL = (LPTSTR)command.c_str(); 
ret = CreateProcess(NULL, cmdL, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL,NULL, &startupinfo, &pro2info); 

cout<<"hProcess: "<<pro2info.hProcess<<endl; 
cout<<"dwProcessId: "<<pro2info.dwProcessId <<endl; 

//Want to wait till the command executes 

while (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)!=WAIT_OBJECT_0) 
    cout<<"waitprocess:true"<<endl; //The process is finished; 

CloseHandle (pro2info.hProcess); 
+1

如果命令是正確的,那麼'system'功能*應*等待它完成,否則將無法返回命令的退出狀態。 –

+0

你怎麼知道你的代碼「不工作」?當你運行它會發生什麼?你不檢查任何地方的錯誤?請詳細說明。 –

回答

0

我覺得你並不需要「開始」,在命令開頭,即使您正在使用的標誌CREATE_NEW_CONSOLE。 「開始」與system一起使用(因爲system使用批處理命令),但是如果您要創建新進程,則只應指定圖像文件的路徑。順便說一句,要知道發生了什麼的唯一方法是檢查CreateProcess(最終GetLastError())的回報。

此外,這不是使用WaitForSingleObject的最佳方式。你應該趕上WAIT_FAILED並使用GetLastError(),否則你在SO上的下一篇文章將是:「爲什麼我的程序不在等待?」 :-)

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx