4

ここここでプリエンプティブ マルチスレッドについて読みました。

Delphi でこれを行う方法はありますか? Delphi でスレッド化する他の方法と比較して (利点と欠点) はどうですか?

4

3 に答える 3

7

あなたが言及している「他の方法」はすべて、オペレーティングシステムの基礎となるスレッド機能を使用しているようです。これはプリエンプティブです。言い換えれば、最も便利だと思う方を選択すると、先取りされます。

非プリエンプティブ (別名協調) スレッドを取得するには、通常、スレッドを「ファイバー」に変換することによって、少し余分な作業が必要です。

于 2010-11-19T00:32:35.977 に答える
5

最新バージョンの Windows はすべて、プリエンプティブ マルチタスクオペレーティング システムです。これは、スレッドとプロセス (存在するプロセスが少なくとも 1 つの実行スレッドを必要とする場合) がすべてスケジュールされ、プリエンプティブに実行されることを意味します。

したがって、「Delphiでこれを行う方法はありますか」には次の答えがあります。

  • シングルスレッドの Delphi アプリケーションは、他のアプリケーションと共にすでにプリエンプティブにスケジュールされています
  • マルチスレッド Delphi アプリケーションを作成する場合も同様です。 アプリケーションで協調スレッド モデルなどの非プリエンプティブ モデルを作成するには、かなりの労力を費やす必要があります。1 つのアプローチは、コルーチンを使用することです。Delphi 7 を使用した例を次に示します。

最良の答えはTThreadまたはネイティブ Windows スレッドまたはそれらの周りのラッパーを使用することです。プリエンプティブ マルチスレッドが可能になります。

リンク内のすべてのモデルは通常の Windows スレッドを使用しており、あなたの質問は、主に通信または実行中のタスク (他のスレッドで実行される作業のジョブ) の技術であるさまざまなスレッド技術について混乱していることを意味していると思われます。その場合は、質問を更新するか、これらのモデルの説明を探している別の人に尋ねてください。

于 2010-11-19T01:25:39.217 に答える
2

Windows7で導入されたユーザーモードスケジューリングを見たことがありますか。ファイバーは基本的に実際には機能しません。これに関する情報はMSDNサイトにたくさんあり、チャンネル9のいくつかのビデオを思い出しているようです。

于 2010-11-19T19:53:37.880 に答える