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