在圖形應用程序中,我使用控制檯輸入執行調試命令。當創建控制檯時,還會創建一個新線程來收集處理所有輸入的用戶命令,圖形應用程序將繼續並行運行。我使用boost :: thread庫。可能阻止cin等待輸入嗎?
它迄今爲止效果很好,但是我還沒有找到一個很好的解決方案來停止執行此線程。線程總是等待用戶輸入:
while(appRunning)
{
std::cin>>theUserCommand;
// ...do stuff
}
然後在圖形應用程序結束時,將停止所有控制檯的功能,其中包括我的主題:
appRunning = false;
// do some more related clean up
myListeningThread->join();
正如你所看到的std :: cin將在聯接被調用後等待用戶輸入。 我試過的一個解決方案是創建事件「合成擊鍵」,std :: cin將得到你用ENTER發送的任何值,線程將很好地結束,這個解決方案是可怕的,我不想保留它。 此外,它在該工具執行的環境之一中工作,但當我嘗試使用它與UI API一起使用時失敗。你們能指導我如何以正確的方式解決這個問題?不能確切地說,如果在C++文檔中有一個函數阻止std :: cin等待用戶輸入,並且只是繼續執行程序,它甚至有可能嗎?
編輯:很好,我發現keybd_event對於某些環境有點誤導,用WriteConsoleInput顯式指定輸入處理程序的效果很好。
有幾種可能性,但它們都依賴於操作系統。這個程序的操作系統是什麼? – zwol 2011-12-19 23:42:27
Win/VStudio9.0,我用我提到的解決方案的keybd_event,如果它依賴於操作系統是沒有問題的。你會如何推薦我解決它? – notNullGothik 2011-12-20 00:13:50
順便說一句,SetConsoleCtrlHandler並不適合我,這將結束應用程序進程跳過應用程序的所有清理結束。 – notNullGothik 2011-12-20 00:21:16