因此,我在Win32中通過主OpenGL窗口創建了一個控制檯,以便使用它爲我的事件循環生成命令。但是,我有一些困難。控制檯反覆檢查CIN輸入,使用以下循環:從另一個線程中關閉WINAPI中的重定向控制檯
while (*loopEnabled)
{
string str;
getline(cin, str);
if (str == "quit")
{
PostQuitMessage(0);
return;
}
}
這是在一個單獨的線程從我的主窗口中運行,並且是爲了發送退出事件並退出。但是,首先,退出消息似乎並不完全工作。似乎發生的是,這隻允許主窗口關閉 - 我仍然需要手動關閉主窗口。看來PostQuitMessage不會爲我處理適當的Windows事件?也許我在這裏犯了一些錯誤。
更深遠的問題實際上是從控制檯線程外部退出此事件循環,而不必輸入隨機輸入,以便它移過常數getline並在條件失敗時退出。我試圖通過嘗試提供虛假輸入來做到這一點,但我無法做到這一點。它可能與輸入被重定向到控制檯有關。也許例外可能工作?我不知道。
下面是重定向IO到控制檯的代碼:
AllocConsole();
handleOut = GetStdHandle(STD_OUTPUT_HANDLE);
int hCrt = _open_osfhandle((long)handleOut, _O_TEXT);
hfOut = _fdopen(hCrt, "w");
setvbuf(hfOut, NULL, _IONBF, 0); //Can assign custom buffer here! Currently no buffering (_IONBF)
*stdout = *hfOut;
handleIn = GetStdHandle(STD_INPUT_HANDLE);
hCrt = _open_osfhandle((long)handleIn, _O_TEXT);
hfIn = _fdopen(hCrt, "r");
setvbuf(hfIn, NULL, _IOLBF, 256);
*stdin = *hfIn;
摘要: 我有窗口和控制檯。我關閉窗口,它等待控制檯輸入以獲取循環中的getline。我在控制檯中輸入「quit」,控制檯循環結束,但主窗口沒有注意到。幫幫我? .-。我對Windows編程頗爲陌生。
錯誤的線程,每個線程都有自己的消息隊列。你將不得不PostMessage()WM_QUIT消息。當然,知道要將它發佈到哪個窗口,從來不會在想要混淆UI線程的工作線程中留下細節。 –