ホームページ > バックエンド開発 > C++ > インタラクティブなアプリケーション向けにノンブロッキングのコンソール入力を C で実装するにはどうすればよいですか?

インタラクティブなアプリケーション向けにノンブロッキングのコンソール入力を C で実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-30 17:39:30
オリジナル
719 人が閲覧しました

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

C のノンブロッキング コンソール入力

最新の C では、ノンブロッキング コンソール入力により、プログラム中にユーザー コマンドをシームレスに処理できます。は実行を続けて情報を出力します。この機能は、インタラクティブなアプリケーションやゲームで重要になることがよくあります。

C 11 解決策:

ノンブロッキング コンソール入力を実装する効果的な方法の 1 つは、別個のコンソール入力を使用することです。糸。このアプローチにより、バックグラウンド スレッドがコンソールへの入力を監視している間、メイン プログラムの実行を継続できます。次のコード サンプルは、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 秒に設定します。 。ユーザーがこの時間内に入力を入力すると、プログラムは応答変数を入力に設定します。それ以外の場合は、デフォルトで「maybe」になります。

このノンブロッキング入力アプローチにより、プログラムはユーザー入力に効率的に応答しながら、進行中の計算と出力を継続できます。これは、インタラクティブな C アプリケーションを構築するための強力なテクニックです。

以上がインタラクティブなアプリケーション向けにノンブロッキングのコンソール入力を C で実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート