1

プログラムの終了時にスレッドが自己終了できるように、すべてのスレッドがまだ実行されていることを定期的にチェックする必要があります。1つを除くすべての場合、これは状態変数をチェックするだけの問題ですが、最後のスレッドはユーザー対話スレッドであり、そのループはユーザー入力を無期限に待機し、ユーザーが命令を入力したときにのみ状態変数をチェックします。この時点で、プログラムは実行されていないときにクラスが正しく動作できないため、とにかく失敗します。ただし、理想的には、この点に到達したくないのです。

可能であれば、getlineのタイムアウトが最善の解決策だと思いますが、それが不可能または適切なオプションである場合は、スレッドを適切に終了できるオプションを利用できます。

余談ですが、std::getlineについて多くの言及があります。getlineは、名前空間を使用するかどうかに関係なく機能するようです。一方は他方のエイリアスであり、どちらを使用するのが適切ですか?

4

4 に答える 4

1

にタイムアウトを設定する(標準の)方法はありませんstd::getline。特に、C++標準ライブラリはスレッドの存在を認識していません

2番目の質問に答えるために、の標準準拠バージョンはstd::getline名前空間にあるものです。

于 2010-07-07T23:57:36.743 に答える
0

おそらく、これを行う最も簡単な方法は、を実行することを唯一の目的として、さらに別のスレッドをスピンオフすることgetline()です。

googleはこの結果を返します。これは、Win32に大きく依存していますが、例を示しています。ただし、使用しているスレッドライブラリに移植できるはずです。

于 2010-07-08T00:00:28.407 に答える
0

スレッドに必要なクリーンアップがない場合、別の解決策はexit、プロセスを終了するときに呼び出すことです。 exitすべてのスレッドを終了し、プロセスを終了します。

于 2010-07-08T00:14:48.173 に答える
0

ユーザースレッドに信号を送るために別のスレッドが必要です。
これをどのように行うかは、使用しているスレッドライブラリによって異なります。

于 2010-07-08T00:18:30.283 に答える