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

VC++2008にて、サーバとクライアントPCの相互通信により、
クライアントPC側で、サーバデータを表示する
エクスプローラもどきを作成しています。

サーバ側は、複数台のPCと送受信を行うため、
通信部分をマルチスレッド化しているのですが、
クライアント側は、基本的には、シングルスレッドでOKと考え、
通信部分はマルチスレッド化していませんでした。


クライアントで、ファイルアイコンをクリックしたら、
ファイルデータを受信して、ファイルをオープンし、
クローズすると、サーバへ上書きしに行く部分を、
マルチスレッドにて作成しました。
(ファイルオープンの箇所からマルチスレッド化)

問題が起こっているのは、クローズ後に、
ファイル上書きのために、CSocket派生クラスをCreateすると
落ちてしまうことです。

シングルスレッドでは、Createも正常に通るので、
マルチスレッドから、Createを呼んでることが
原因だとは思うのですが、なぜ原因となっているのか?
また、どのように修正すれば良いかが分かりません。

説明が分かりづらいかもしれませんが、よろしくお願いします。

A 回答 (1件)

こちらを参照してください。


http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/ …

この回答への補足

CSocket/CAsyncSocketは使うべきではないということですか。
ということは、今回の件も回避策は無いということになりますね。。。

期限の面から、通信を刷新するのは
かなり厳しいので、出来れば、今回はこの点だけを
修正できることが希望だったのですが、
仕方がないのでしょうね。

補足日時:2009/05/12 12:20
    • good
    • 0
この回答へのお礼

別スレッドを作成したのに、AfxSocketInit()を呼んでいなかったことが
原因でした。

ただし、CSocket/CAsyncSocketには根本的なバグが
あるようですし、機会を見て刷新しようと思います。
ありがとうございました。

お礼日時:2009/05/12 16:55

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