2010-11-27 7 views
5

私はTcpListener.AcceptTcpClient()で待っているスレッドがあります。ブロックです。これは時々停止したいものです。廃止されたThread.Suspendを使用せずにブロッキングスレッドを中断する方法

私はMonitor.Wait(...)について読んだことがありますが、私はミューテックスを扱う経験があり、スレッドがブロッキングメソッドを待っていると面白いです。

Thread.Suspend(...)が廃止されたので、スレッドをどのように中断する必要がありますか?

+1

スレッドがすでにブロックされている場合、スレッドをブロックするのは意味がありません。あなたは詳細を教えてください。 –

+0

OK、何を意味するのか分かります。私はスレッドが入ってくるTCPコネクションを消費し、それを「サスペンド」するときにはリソースを使用しないようにしたい。これが既に当てはまる場合は、 'Suspend'フラグを設定し、' AcceptTcpClient'が返って来るのを待つでしょうか? –

答えて

2

これは不可能です。解決できない競合状態です。リスナーは、サスペンドする前にマイクロ秒で接続を受け入れることができます。リスナーを閉じて接続を受け付けないようにするのは唯一の方法です。

ここで論理を再考してください。その接続で何をしようとしていても、それを止めたいのであれば、おそらく代わりにロックする必要があります。

+0

スレッドを取り除き、非同期の 'BeginAcceptTcpClient'を使って解決しました。 –

関連する問題