2

Microsoft の Web サイトで、スレッド チュートリアル内で以下を読んでいました。

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

MSDN は、次の方法を使用して、スレッドが有効になるまで待機することを提案しています。

while (!oThread.IsAlive);

これは推奨される待機方法ですか? メインスレッドの応答を維持できるように「DoEvents」呼び出しを挿入する方がよいでしょうか? 何か問題が発生し、スレッドが「アクティブ」にならない場合のエラー処理はどのように行うべきですか? これが悪い習慣である場合、いつ IsAlive を使用するのが最適ですか?

何人かのモデレーターがこれを重複としてマークしましたが、彼らが参照する他の質問では、IsAlive、DoEvents、またはスレッドの開始に失敗した場合の適切なエラー処理について何も言及していません。私の質問は、質問内でリンクした MSDN の記事と、IsAlive でビジー ループを使用するという提案に特に関連しています。

4

2 に答える 2

1

Killercam の回答に加えて、リンクされたページのサンプル コードがゴミであることを指摘したいと思います。誰かが「1 つのページにあるさまざまなメソッドをすべて示すサンプルを作成する」ように言われたようです。そして、それは文字通りそのように出てきました...

スレッド化を行う場合、ポーリング ループで待機することはほとんどありません。特に、あらゆる種類の待機があるタイトなものではありません。それらは CPU を熱くし、信頼性が低く、そこにスリープを入れるとレイテンシーが高くなりますが、それを行うためのより良い方法があります。スピン ループは、非常に特殊なケースで何をしているかを知っている専門家向けです。

スレッドが「生きている」のを待っても意味がありません。なぜ誰かが実際のコードでこれを行うのでしょうか? これは、スレッド プロシージャが実行を開始したことを意味するものではありません (実際にはそうではありません)。

最新のパラダイムを使用することをお勧めします。TPL は、開始するのに適した場所です。Killercam の回答を参照してください。

于 2013-04-03T11:16:09.347 に答える