首頁 > 後端開發 > C++ > 如何使用並發在 C 中實現非阻塞控制台輸入?

如何使用並發在 C 中實現非阻塞控制台輸入?

Barbara Streisand
發布: 2024-10-29 17:04:02
原創
544 人瀏覽過

How to Implement Non-Blocking Console Input in C   Using Concurrency?

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 << "Do you even lift?" << std::endl << std::flush;
    std::string answer = "maybe"; //default to maybe
    std::future<std::string> future = std::async(getAnswer);
    if (future.wait_for(timeout) == std::future_status::ready)
        answer = future.get();

    std::cout << "the answer was: " << answer << std::endl;
    exit(0);
}</code>
登入後複製

在此程式碼中:

  • getAnswer() 是在單獨執行緒中讀取使用者輸入的函數。
  • std::async 函式啟動 getAnswer( ) 在自己的執行緒中。
  • future.wait_for() 函數檢查 getAnswer() 是否在指定的時間範圍內(在本例中為 5 秒)完成。
  • 如果 getAnswer()完成後,其結果會儲存在answer變數中。
  • 當使用者輸入執行緒在背景執行時,程式繼續運作並輸出訊息。

以上是如何使用並發在 C 中實現非阻塞控制台輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板