ホームページ  >  記事  >  バックエンド開発  >  C プログラムは実行をブロックせずにユーザー入力を受け入れるにはどうすればよいでしょうか?

C プログラムは実行をブロックせずにユーザー入力を受け入れるにはどうすればよいでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 08:10:38673ブラウズ

How Can C   Programs Accept User Input Without Blocking Execution?

C プログラムのノンブロッキング コンソール入力戦略

現代のプログラミングでは、多くの場合、リアルタイムのユーザー コマンドを処理しながら、プログラムは継続的に実行され、情報を出力します。この機能を実現するには、非ブロックのコンソール入力が不可欠です。この記事では、C でノンブロッキング コンソール入力を効果的に実装するためのさまざまな手法を検討します。

C 11 と Future を使用した非同期入力

1 つのアプローチは C 11 の に依存します。 ;図書館。このコードは、ユーザーの入力を保存する将来のオブジェクトを初期化します。 std::async を使用して別のスレッドが生成され、ノンブロッキング入力操作が実行されます。メインスレッドは、将来のオブジェクトのステータスを監視しながら実行を継続できます。この手法は、柔軟で効率的なソリューションを提供します。

例:

#include 
#include 
#include 

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 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);
}

その他の考慮事項:

上記以外

  • ノンブロッキング入力ライブラリ: Boost.Asio や libevent などのライブラリは、専用のノンブロッキング入力機能を提供します。
  • プラットフォーム固有の方法: さまざまなオペレーティング システムが、ノンブロッキング入力のシステム コールを提供します。

アプローチの選択は、プラットフォームの互換性、パフォーマンス要件、簡単な操作などの要素によって異なります。実装。さまざまなオプションを検討することで、特定のプロジェクトのニーズに最適なソリューションを確実に選択できます。

以上がC プログラムは実行をブロックせずにユーザー入力を受け入れるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。