0

大量のデータを処理するプログラムがあります。停止して、中断したところから再開できるように、すでに準備が整っています。

しばらくの間(たとえば、1000ファイルを処理する)設定できるようにしたいのですが、ユーザー入力でエスケープできるようにしたいです。次に例を示します。

for(int i = 0; i < 1000; i++) {
    if( checkForUserInput() ) { break; }

    processFile(i);
    /*
     *  ...
     *
     */
}

ユーザー入力を求めることができることは知っていますが、それがいくつの基準に一致すると壊れます...しかし、デフォルトでユーザー入力なしで実行し続けるようにしたいと思います。

私はずっと前にJavaでこれと同じことをしたかもしれないと思います.IIRCは最終的にスレッドを使用しました---ここでも同様に処理する唯一の方法でしょうか? または、Cntrl-C のようなキーボード エスケープ シーケンスを探して、特定の方法で動作させる方法はありますか?


編集:スレッドなしではそのようなことができない理由がある場合、その理由も知りたいです。

ありがとう!

4

2 に答える 2

3

ユーザー入力は、定義上ブロッキングです。そのため、ユーザー入力がないと判断したタイムアウトを設定し、ブロックを解除して続行する必要があります。スレッド化/割り込みなしではそれを行うことはできません。

プラットフォームが異なれば、ユーザー割り込みの処理も異なります。シグナル処理について読んでください。

于 2012-12-22T01:05:35.600 に答える
0

前述のように、signal()を使用して、コンソールタイプのアプリケーションでCTRL-Cをキャッチできます。ただし、ブロックせずに入力を読み取る標準的な方法はありません。

プラットフォームごとにいくつかの異なるソリューションがありますが、それらはすべてかなり面倒です(もちろん、コードを入手したら、それを別のプロジェクトにコピーするのはそれほど難しくありません)。

コメントで述べたように、CとC ++は多数の異なるマシンで実行するように設計されており、「この方法でこれを行う必要がある」という仕様に追加する要件が多いほど、言語が制限されるため、特定のシステムで動作することはできません-端末とコンピューターの間に110ビット/秒の半二重(データは一度に一方向にしか送れない)回線しかない場合はどうなりますか?そして、1.2MHzで動作するプロセッサは1つだけです...

于 2012-12-22T02:30:39.460 に答える