UI スレッド = メインスレッドです。
メインスレッドが通信先と通信を開始すると _beginthread でスレッドを起動、
接続が完了すれば、メインスレッドに接続した旨をメッセージで伝えています。
その後は、UI 側がデータを送信したい時は PostThreadMessage で通信スレに指示、
通信先からデータが来た場合には、メインスレッドにデータ受信メッセージを送ります。
時々長時間処理が必要になって、その場合は新たにワーカースレッドが作成されて、
そのスレッドが一方的に通信スレッドに PostThreadMessage で送信データを指示しています。
ワーカースレッドは接続が途絶えた事のみを検知しています。

メッセージは遅いんですね。CriticalSection とかを使って処理したほうがいいのか。
でも、処理が楽だし、UI を記述するのと同様に出来るのが楽なんですが・・・。

UI スレッドが何らかのメッセージを受け取るのと同じような処理をする場合は
どうしていますか?WM_TIMER で CriticalSection の中を監視?