C 語言中的非阻塞控制台輸入
程式設計中的一個常見要求是在程式不斷運作和輸出資訊的同時處理用戶命令。 C 中的傳統控制台輸入方法會阻止程式執行,直到使用者按 Enter 鍵為止,但對於非阻塞輸入,您需要替代方法。
解決方案:同時
C 11 引入了 std::async 和 std::future 並發庫。這允許您在不停止主程式的情況下為非阻塞輸入產生一個單獨的執行緒。
實作
提供的程式碼示範了非阻塞控制台輸入:
<code class="cpp">#include <iostream> #include <future> #include <thread> #include <chrono> std::string getAnswer() { std::string answer; std::cin >> answer; return answer; } int main() { std::chrono::seconds timeout(5); std::cout future = std::async(getAnswer); if (future.wait_for(timeout) == std::future_status::ready) answer = future.get(); std::cout <p>在此程式碼中:</p> <ul> <li>getAnswer() 是在單獨執行緒中讀取使用者輸入的函數。 </li> <li>std::async 函式啟動 getAnswer( ) 在自己的執行緒中。 </li> <li>future.wait_for() 函數檢查 getAnswer() 是否在指定的時間範圍內(在本例中為 5 秒)完成。 </li> <li>如果 getAnswer()完成後,其結果會儲存在answer變數中。 </li> <li>當使用者輸入執行緒在背景執行時,程式繼續運作並輸出訊息。 </li> </ul></chrono></thread></future></iostream></code>
以上是如何使用並發在 C 中實現非阻塞控制台輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!