質問

はありまュクロスのスレッドの通信イン?い送信メッセージのスレッドを持たないウィンドウ?

役に立ちましたか?

解決

ウィンドウハンドルが実現されると自動的に作成される標準メッセージループを実装するスレッドにのみ(Windows)メッセージを送信できます。

ただし、メッセージを使用してスレッドと通信する必要はありません。イベントオブジェクト(VCLのTEvent)で待機させ、スレッドに機能を実行させたいときにこのイベントを通知します。

ただし、マルチスレッドを初めて使用する場合は、学習効果が必要な場合を除き、これらすべての詳細を自分で説明しないでください。 OmniThreadLibrary を使用するだけで完了です。使い方を知ったら、内部を掘り下げることで学ぶべきことがたくさんあります。

編集:

この質問は非常によく似ています。

編集2:

" [OmniThreadLibrary]で何が簡単になり、どのくらいの費用がかかりますか?」という質問についてDelphi 2007を使用している場合は、自分で確認することをお勧めします。概念を説明するためのサンプルがいくつかありますが、簡単な「実生活」のためです。たとえば、このブログ投稿-そのためにライブラリをインストールする必要さえありません。

また、マルチスレッド用のライブラリを使用するには一定の信念が必要であることに同意します。 OTOHは、VCLが提供するもので対処することはほとんどありません。サンプルコードは、まだよく考えられていないSynchronize()呼び出しを使用しています。マルチスレッドプログラミングにはるかに適しているスレッドセーフなプロデューサー-コンシューマ-キューなどのサポートはありません。また、VCLが提供するよりも、マルチスレッドプログラムのより強固な基盤が必要であることに同意する場合、なぜその特定のホイールを再発明するのですか?

ライブラリを使用するコストに関して:それがあなたにとって十分に速いかどうかを自分で計る必要があります。私見ではスレッド間の通信を抽象化しますが、すべての抽象化はパフォーマンスを犠牲にします。

結局のところあなたのためではないと判断した場合は、自分でコードを書いてください。 Delphi 4でも同じことをしましたが、そのコードを10年近く使用しています。そして、私が見つけたバグの量とその時に経験したコーナーケースから判断すると、マルチスレッドに慣れていない人には、自分用のライブラリコードを 書かないことを絶対にお勧めします。また、本当に本当にしたい場合は、この投稿を心から。

他のヒント

質問 Delphiマルチスレッドメッセージループにもいくつかの例が含まれています。スレッド間の通信の

場への参照を保持するスレッドオブジェクトしたりすることも可能ですので直接、手続きの店舗情報を更新します。明らかにすることはスレッドに対して安全です。

また、お客様が利用中の制御オブジェクトを通じてのスレッドのときではない忙しい。私はアプリのスレッドが特に目的は、割り当てるスレッドIDです。スレッドが"post"のメッセージのメッセージ-ID文字列のためのパラメータを別のスレッドIDを取得す。その他のスレッドのピックでそのビジネスユース、レジャー、行動します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top