プロが教えるわが家の防犯対策術!

VC++でCAsyncSocketの派生クラス(class ClientSocket)を作り
このクラスでクライアント接続するソフトを作っているのですが、
( ClientSocket は非ブロッキングモードのストリームソケットで、
 OnConnect,OnReceave,OnCloseをオーバーライトしています。)
ワーキングスレッド内でClientSocketを使おうとするとOnConnectなどが反応せず悩んでいます。
(メインスレッドで使った場合は反応します。)

一応CAsyncSocketが不可視のウィンドウを持ち、そこでウィンドウメッセージを受け取りOnConnectなどを呼び出していることはわかったのですが、ワーキングスレッド内ではウィンドウメッセージが伝わらないのでしょうか。
どうかご教授のほどお願いしたします。

http://oshiete1.goo.ne.jp/qa159828.html
にも似た症状の方がいたのですが解決してないようです。

A 回答 (1件)

「一応CAsyncSocketが不可視のウィンドウを持ち、そこでウィンドウメッセージを受け取りOnConnectなどを呼び出している」ということですので、以下の2点をチェックしてみて下さい。



・ワーキングスレッド内でウィンドウを作成しているか?
 ウィンドウメッセージは、ウィンドウを作成したスレッドに投げられます。
・ワーキングスレッドでメッセージループが回っているか?
 メッセージループが回っていないとウィンドウメッセージは送られてきません。
    • good
    • 0
この回答へのお礼

>・ワーキングスレッドでメッセージループが回っているか?
ご指摘頂いたとおり、ワーキングスレッドのwhile内でソケット処理をすべて行っていたため(初期化,接続,通信など)メッセージループが回っていなかったみたいです。
while内にPeekMessage~DispatchMessageなどを追加してメインダイアログにメッセージを送ることで解決できました。
http://www.sm.rim.or.jp/~shishido/mainloop.html
ご教授頂き有難うございました。

お礼日時:2006/12/16 09:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!