首頁  >  文章  >  後端開發  >  如何在 C 語言中為互動式應用程式實現非阻塞控制台輸入?

如何在 C 語言中為互動式應用程式實現非阻塞控制台輸入?

Patricia Arquette
Patricia Arquette原創
2024-10-30 17:39:30627瀏覽

How can I implement non-blocking console input in C   for interactive applications?

C 中的非阻塞控制台輸入

在現代C 中,非阻塞控制台輸入允許在程式運行時無縫處理使用者命令繼續運行並輸出訊息。此功能在互動式應用程式和遊戲中通常至關重要。

C 11 解決方案:

實現非阻塞控制台輸入的一種有效方法是使用單獨的控制台線。這種方法允許主程式繼續執行,同時後台執行緒監視控制台的輸入。以下程式碼範例使用 C 11 示範了此方法:

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

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>

說明:

在此範例中, getAnswer 函數負責擷取使用者的輸入。 std::async 函式啟動一個單獨的線程,執行 getAnswer 並傳回一個 std::future 對象,可用來擷取結果。

主程式設定 5 秒的超時時間來等待使用者輸入。如果使用者在此時間內輸入內容,程式會將答案變數設定為輸入。否則,它預設為“也許”。

這種非阻塞輸入方法允許程式繼續其正在進行的計算和輸出,同時仍有效地回應使用者輸入。它是建立互動式 C 應用程式的強大技術。

以上是如何在 C 語言中為互動式應用程式實現非阻塞控制台輸入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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