1

別のプロセスからのテキスト入力をwriteline経由で受け入れる必要があるC++で記述されたコンソールアプリがあります(期限が続きます)。これはSTDIN経由で行う必要があると思いますが、可能な限り最速の方法で動作する必要もあります。 。その後、コンソールアプリはプロセスに返信する必要があります。

fgets私はしばらくコンソールプログラミングをしていませんが、学校のCクラスで、、などのCタイプの関数がたくさんあるgetlineことを覚えていますが、覚えているのは、それらがかなり遅いように見えたことです。

では、WinAPIを使用してこの交換(ここでも「クイックインしてからアウト」)を行う方法はありますか?

4

1 に答える 1

1

理論上最速の方法は、ほぼ確実にシステムレベルの入力ルーチンです。これは、stdin(Cで、C ++でも利用可能)とstd::cinこれらに基づいて構築されているためです。一方、これらは一般にプラットフォーム用に最適化されているため、自分で最適な構成(たとえば、バッファーサイズなど)を見つけられない限り、それぞれに対してread(Unix)またはReadFile(Windows)を呼び出すと、あまり得られない可能性があります。文字はおそらく。のようなものを使用するよりも遅くなります std::getline

もう1つの質問は、データを読んだ後、データをどのように処理するかです。のような関数、readまたは特定の文字数のReadLineバッファ()を提供します。char[]次に、それを分析したり、行に分割しstd::getlineたりする必要があります。次のような関数std::stringは、行を含むものを提供します。本当に熟練したC++プログラマーであれば、実際のデータがから移動されないように整理することもできますが char[]、これには、標準ライブラリにすでに実装されている多くのものを再実装する必要があります。標準ライブラリでテンプレートを使用するということは、他の方法で実装する必要があるほど多くを実装する必要がないことを意味しますが、std::string2つのイテレータを維持する同等のものを作成する必要があります(char const*)データ自体ではなく。

最後に、とを使用してアプリケーションを作成することから始め std::getlineますstd::string。それが機能するようになったら、実際のパフォーマンスが何であるかを確認し、必要に応じて、それを改善する方法を検討します。

于 2013-02-13T09:14:42.717 に答える