BOOL isStartSuccess;
LPTSTR* commandArray = new LPTSTR[2];
commandArray[0] = _tcsdup(TEXT("C:\\Program Files\\WinRAR\\WinRAR.exe a -s -m5 -ibck -ep1 -r -s \"D:\\ZdKRX.rar\" \"D:\\ZdKRX\""));
commandArray[1] = _tcsdup(TEXT("C:\\Program Files\\WinRAR\\WinRAR.exe a -s -m5 -ibck -ep1 -r -s \"D:\\ZdSFE.rar\" \"D:\\ZdSFE\""));
PROCESS_INFORMATION* pidInfo = new PROCESS_INFORMATION[2];
for (int i = 0; i < 2; i ++)
{
ZeroMemory(&pidInfo[i], sizeof(PROCESS_INFORMATION));
}
STARTUPINFO* startInfo = new STARTUPINFO[2];
for (int i = 0; i < 2; i++)
{
ZeroMemory(&startInfo[i], sizeof(STARTUPINFO));
}
HANDLE* handles = new HANDLE[2];
for (int i = 0; i < 2; i++)
{
startInfo[i].cb = sizeof(startInfo);
startInfo[i].lpReserved = nullptr;
startInfo[i].lpReserved2 = nullptr;
startInfo[i].lpTitle = nullptr;
startInfo[i].lpDesktop = nullptr;
startInfo[i].dwFlags = STARTF_USESTDHANDLES;
startInfo[i].hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startInfo[i].hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startInfo[i].hStdError = GetStdHandle(STD_ERROR_HANDLE);
isStartSuccess = CreateProcess(nullptr, commandArray[i], nullptr, nullptr, FALSE, CREATE_NO_WINDOW, nullptr, nullptr, &startInfo[i], &pidInfo[i]);
if (isStartSuccess == FALSE)
{
cout << "Create WinRar Process Failed" << endl;
int ret = GetLastError();
cout << "Error Code: " << ret << endl;
}
handles[i] = pidInfo[i].hProcess;
}
WaitForMultipleObjectsEx(2, handles, TRUE, INFINITE, FALSE);
//為什么這里的waitformultiobjectsex不生效
for (int i = 0; i < 2; i++)
{
CloseHandle(pidInfo[i].hThread);
CloseHandle(pidInfo[i].hProcess);
}
delete[] commandArray;
delete[] pidInfo;
delete[] startInfo;
delete[] handles;
小白求教,/為什么waitformultiobjectsex不生效,winrar還在作業就回傳了
uj5u.com熱心網友回復:
看看 WaitForMultipleObjectsEx 回傳值是多少?uj5u.com熱心網友回復:
回傳值是WAIT_OBJECT_0+0
uj5u.com熱心網友回復:
參考winrar幫助中命令列引數相關章節。uj5u.com熱心網友回復:
程式運行程序中winrar是正常進行解壓作業的,只是WaitForMultipleObjectsEx 沒有等winrar完成作業就回傳了
uj5u.com熱心網友回復:
僅供參考:WinRAR 在成功操作的情況下以 0 代碼退出。非零退出代碼表示下列錯誤:
代碼值 描述
0 成功操作。
1 警告。發生非致命錯誤。
2 發生致命錯誤。
3 解壓時發生 CRC 錯誤。
4 嘗試修改一個 鎖定的壓縮檔案。
5 寫錯誤。
6 檔案打開錯誤。
7 錯誤命令列選項。
8 記憶體不足。
9 檔案創建錯誤。
255 用戶中斷。
uj5u.com熱心網友回復:
如果你CreateProcess沒有問題的話,Wait應該就不會錯的~uj5u.com熱心網友回復:
會不會是我的code寫的有問題。。。createprocess回傳值是1,已經正常運行了,winrar照常解壓
會不會我create出來的行程呼叫winrar后結束了。。。按道理不會這么跑啊
uj5u.com熱心網友回復:
我用管理員方式運行vs2015,然后重新跑一次,WaitForMultipleObjectsEx 就正常的等待了,為什么會這樣。。。大俠,求教
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/142582.html
標籤:基礎類
上一篇:C++呼叫matlab的新問題
下一篇:回應wm_command程式卡死
