我正在使用CreateProcess来替代我的代码中的system()调用。我之前使用的是:
我将使用以下内容替代它:
system(xfoil.exe < create_results.txt");
我将使用以下内容替代它:
PROCESS_INFORMATION ProcessInfo; //This is what we get as an [out] parameter
STARTUPINFO StartupInfo; //This is an [in] parameter
LPCWSTR input_file = _tcsdup(TEXT(".\\create_results.txt"));
HANDLE inpfl = CreateFile(input_file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
StartupInfo.hStdInput = inpfl;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof StartupInfo; //Only compulsory field
LPCWSTR exe_path =_tcsdup(TEXT(".\\xfoil.exe"));
if (CreateProcess(exe_path, NULL,
NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL,
NULL, &StartupInfo, &ProcessInfo))
{
WaitForSingleObject(&ProcessInfo.hProcess, 2000);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(inpfl);
}
else
{
CloseHandle(inpfl);
std::cout << "Could not create xfoil process" << std::endl;
}
原因是我需要控制进程允许运行的时间(在这种情况下为2000ms),但似乎这种方法不起作用。 我将进程的输入重定向到我想要作为输入的文件的句柄(以替换<运算符),但进程没有收到任何东西。它确实在单独的控制台中启动了xfoil.exe。
hStdInput
,在哪里调用ZeroMemory
? - Some programmer dude