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

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

DDD
DDDオリジナル
2024-10-29 19:50:03792ブラウズ

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

C のノンブロッキング コンソール入力 : 多目的ソリューション

C プログラミングの領域において、ノンブロッキング コンソールを処理する機能特に、時間のかかるタスクの実行中であっても継続的なユーザー操作が必要なアプリケーションを作成する場合、入力は非常に重要です。この記事では、最新の C テクニックと外部ライブラリを使用し、柔軟性を高めるための寛容なライセンスを活用した包括的なソリューションを紹介します。

アプローチと考慮事項

C では、非依存性を実現するためのいくつかのアプローチが提供されています。 - コンソール入力のブロック。それぞれに独自の利点と考慮事項があります:

  • C 11 スレッド モデル: このアプローチでは、std::thread ライブラリと std::future ライブラリを利用して、メイン プログラムの実行とは独立してユーザー入力を処理する別のスレッドで、同時処理が可能です。
  • Boost.Asio: この外部ライブラリは、強力なネットワーキングと低レベル I/O フレームワークを提供します。ノンブロッキング コンソール入力の機能が含まれます。
  • ncurses: 端末制御と入力処理に特化した広く使用されているライブラリで、ノンブロッキング コンソール入力と高度な機能の豊富なセットを提供します。端末管理。

アプローチの選択は、プログラマの特定のニーズと好みによって異なります。よりシンプルで直接的なソリューションには、C 11 スレッド モデルが適切なオプションです。

例: 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:: を使用してユーザー入力をノンブロッキングで読み取ります。 cin stream.
  • メイン スレッドは、getAnswer 関数を実行するために std::async を使用して別のスレッドを作成します。
  • メイン スレッドは実行を継続し、ユーザーに入力を求めます。
  • ユーザーが 5 秒以内に入力を提供すると (タイムアウト変数で指定)、メインスレッドは将来から入力を取得して出力します。それ以外の場合は、デフォルト値「maybe」が使用されます。

結論

ノンブロッキングのコンソール入力パラダイムにより、C プログラマーはシームレスに処理する対話型アプリケーションを開発できます。ユーザーコマンドとバックグラウンドタスクを同時に実行します。提供されるアプローチはさまざまなレベルの複雑さと機能を提供し、プログラマーが要件に最も適したソリューションを選択できるようにします。

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

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