- 324 名前:315 mailto:sage [2007/05/19(土) 01:01:18 ]
- >>320
長い答え: ブロッキングモードでひたすらrecv()ループをしているんだな。 確かに簡単だが、それでは綺麗にスレッドを終了させられない。 1)ブロッキングモードでrecv()を使う代わりに、 例えばasynchronousモードでWSARecv()+WSAGetOverlappedResult()を使う 2)スレッド間通信用にEventを作る。そのスレッドを止めたい場合は 外からSetEvent()でやんわりと「お願い」する。 3)受信スレッドでは、WSARecv()でトリガした受信の完了と上記のイベントの2つを、 WSAWaitForMultipleEvents()などを用いて、同時に待つようにする。 4)SetEvent()によって待機から抜けた場合は、スレッドが自分で終了する。 こんな感じにすればできるぞ。まあ、基本的なテクニックだが。
|

|