2009-04-16 11 views
1

今日の最後の質問:)前回の質問に感謝します。 ところで:すでにこれについてのフォーラムを検索して、これには全く答えません。システムにまだ残っている作業でアプリケーションをシャットダウンする方法はありますか?スレッドプール

私たちは、スレッドプール上で動作するいくつかのサードパーティのライブラリを使用しており、未処理のアクティビティがある間はシャットダウンしたくありません。

アプリケーションをシャットダウンすると、System.Threading.ThreadPoolに未処理の作業があっても、これらのスレッドはバックグランドスレッドなので、アプリケーションは終了します。

何らかの形式の参照カウントを行う以外に(そして、このメカニズムを使用するためにプールにキューイングされるすべてのアイテムを強制しますが、これは制御できません)、優れた作業がある間にアプリケーションのシャットダウンを停止する方法があります行われなければ。

私はGetAvailableThreads()とGetMaxThreads()を比較しましたが、スレッドが解放されてキューに登録された作業項目が割り当てられていないため、スレッドプールを検出した可能性があります。

すべてのお役に立ちましたか?

種類よろしく ノエル

+0

使用しているサードパーティライブラリの種類は不明ですが、そのライブラリがまだタスクを処理しているかどうかをチェックする関数を公開している可能性はありますか?または、クリーンな方法でシャットダウンする機能ですか? –

+0

Bartozに感謝しますが、残念ながらそうではありません。 – Bigtoe

答えて

0

あなたの返信ありがとうございます。私はAOPとCastle Windsors動的プロキシを使用してスレッドプールの外で回避策を見つけました。幸い私のために、クラスは私がラップすることができるきれいなインターフェイスを公開し、それは治療を働かせます。

1

あなたはサードパーティのコード(多分完了イベント)へのコールバックのいくつかの種類を取得することができない限り、あなたは彼らがThreadPoolを使用して停止したときを知るのに苦労しようとしています。ごめんなさい。そのようなコードは通常、バックグラウンドではないスレッド上にあるべきです。私はあなたがこれを支配していないことを理解しています - 私は、穴の中から容易な道があると確信していません。

+0

ありがとうMarc。それは厄介なものかもしれませんが。 – Bigtoe

0

私はMarc Gravellが正しいと思います。何とかスレッドプールで使用されているスレッドにアクセスできる場合は、Thread.IsBackgroundプロパティをfalseに変更して、必要なものを実現できます。しかし、私はスレッドプール内の管理されたスレッドへの参照をどのように取得するのかはわかりません。

1

私は本当のプログラマーです(それはCです、男の子;-)私はThreadPoolを使用していません。

ただし、スレッドプールに発行する各タスクにセマフォーインクリメントがあり、そのセマフォを完了時に解放することをお勧めします。

アプリケーションが終了するときに、セマフォを待ってください。

どのような用途ですか?

+0

ありがとうございますが、サードパーティ製のライブラリであり、参照カウントなどのためにコードを変更するコードにアクセスできません。 – Bigtoe

+0

与えられたタスクが完了したときに、ある種の通知があると思われますか?コードを変更する必要はありません。セマフォーであり、途中でインクリメントしてから、完了すると解放します。プロセスが終了したいときにセマフォを待ちます。 –

関連する問題