我想獲得所有正在運行的行程的串列,如下所示
example.exe
example2.exe
所以......。 下面是我試過的代碼
。WCHAR* GetAllRunningProccess()
{
PROCESSENTRY32 pe32;
HANDLE snap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0
);
pe32.dwSize = sizeof(PROCESSENTRY32)。
Process32First(snap, &pe32)。
do {
return pe32.szExeFile;
} while (Process32Next(snap, &pe32))。
}
std::wcout << GetAllRunningProccess() << std::endl;
它只列印出
[System Process] 。
uj5u.com熱心網友回復:
你寫的代碼并不像生成器函式那樣作業,以產生多個值。 它只是在回傳第一個值時退出。 你不能從一個函式中回傳超過一次。
do {
return ...; // This will both exit the loop and exit the function.
} while(...)。
盡管如此,coroutines提供co_yield來完成這個任務。
要修復...
最基本的修復方法是重新設計你的函式,以回傳一個字串的向量,而不僅僅是一個字串。
std::vector<std::string> GetAllRunningProcesses()
{
PROCESSENTRY32 pe32;
HANDLE snap = CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, 0
);
pe32.dwSize = sizeof(PROCESSENTRY32)。
Process32First(snap, &pe32)。
std::vector<std::string> 結果。
do {
result.push_back(pe32.szExeFile)。
} while (Process32Next(snap, &pe32))。
CloseHandle(snap)。
return result。
}
然后,為了呼叫它,你可以使用這樣的東西:
for (const auto& processName : GetAllRunningProcesses() ) {
std::cout << processName << std::endl;
}
uj5u.com熱心網友回復:
在你的代碼中
do {
return pe32.szExeFile;
} while (Process32Next(snap, &pe32))。
我很確定在執行這個while回圈后,編譯器會回傳一個值,然后退出函式,繼續執行主體中的代碼,而不是回到回圈中,因此只能得到一個輸出(一個行程)。
相應地更新你的代碼,然后進行測驗。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/306757.html
標籤:
