首頁  >  文章  >  後端開發  >  C 程式如何在不阻塞執行的情況下接受使用者輸入?

C 程式如何在不阻塞執行的情況下接受使用者輸入?

Linda Hamilton
Linda Hamilton原創
2024-10-30 08:10:38743瀏覽

How Can C   Programs Accept User Input Without Blocking Execution?

C 程式的非阻塞控制台輸入策略

在現代程式設計中,通常需要在程式中不斷執行並輸出資訊。非阻塞控制台輸入對於實現此功能至關重要。本文探討了在 C 中有效實現非阻塞控制台輸入的各種技術。

使用 C 11 和 Future 的非同步輸入

一種方法依賴 C 11 的 ;圖書館。該程式碼初始化一個未來對象,該對象將儲存用戶的輸入。使用 std::async 產生一個單獨的執行緒來執行非阻塞輸入操作。主執行緒可以繼續執行,同時監控 future 物件的狀態。該技術提供了靈活高效的解決方案。

範例:

<code class="cpp">#include <iostream>
#include <chrono>
#include <future>

static 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>

其他注意事項:

除上述之外方法,開發者也可以考慮使用:

  • 非阻塞輸入庫:Boost.Asio 和libevent 等庫提供專用的非阻塞輸入功能。
  • 特定於平台方法:不同作業系統提供非阻塞的系統呼叫輸入。

方法的選擇取決於平台相容性、效能要求和實施難易程度等因素。探索各種選項可確保為特定專案需求選擇最合適的解決方案。

以上是C 程式如何在不阻塞執行的情況下接受使用者輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn