您好我想为allegro执行系统命令并等到它完成,因为我需要访问此命令生成的文件。我的代码不起作用。有人可以帮忙吗?命令没有运行?如果我做系统(command.c_str())但不等待它。它可以工作。
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);
答案 0 :(得分:0)
我认为你不需要&#34;开始&#34;在命令开头,即使您使用标志CREATE_NEW_CONSOLE
。 &#34;开始&#34;适用于system
(因为system
适用于批处理命令),但如果要创建新进程,则只应指定映像文件的路径。顺便说一句,知道发生了什么的唯一方法是检查CreateProcess
(最终GetLastError()
)的回报。
此外,这不是使用WaitForSingleObject
的最佳方式。您应该抓住WAIT_FAILED
并使用GetLastError()
,否则您在SO上的下一篇文章将是:&#34;为什么我的程序没有等待?&#34; : - )
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx