※ ChatGPTを利用し、要約された質問です(原文:マルチスレッドでCSocket::Createを呼ぶと落ちる)
マルチスレッドでCSocket::Createを呼ぶと落ちる
このQ&Aのポイント
バグの原因となっているのは、マルチスレッドからCSocket派生クラスのCreateを呼び出すことです。
この問題を解決するためには、マルチスレッドでのクライアントの通信部分もスレッドセーフにする必要があります。
修正方法は具体的には分かりませんが、クライアントの通信部分をマルチスレッド化し、適切な同期処理を行うことで解決できる可能性があります。
マルチスレッドでCSocket::Createを呼ぶと落ちる
VC++2008にて、サーバとクライアントPCの相互通信により、
クライアントPC側で、サーバデータを表示する
エクスプローラもどきを作成しています。
サーバ側は、複数台のPCと送受信を行うため、
通信部分をマルチスレッド化しているのですが、
クライアント側は、基本的には、シングルスレッドでOKと考え、
通信部分はマルチスレッド化していませんでした。
クライアントで、ファイルアイコンをクリックしたら、
ファイルデータを受信して、ファイルをオープンし、
クローズすると、サーバへ上書きしに行く部分を、
マルチスレッドにて作成しました。
(ファイルオープンの箇所からマルチスレッド化)
問題が起こっているのは、クローズ後に、
ファイル上書きのために、CSocket派生クラスをCreateすると
落ちてしまうことです。
シングルスレッドでは、Createも正常に通るので、
マルチスレッドから、Createを呼んでることが
原因だとは思うのですが、なぜ原因となっているのか?
また、どのように修正すれば良いかが分かりません。
説明が分かりづらいかもしれませんが、よろしくお願いします。
お礼
別スレッドを作成したのに、AfxSocketInit()を呼んでいなかったことが 原因でした。 ただし、CSocket/CAsyncSocketには根本的なバグが あるようですし、機会を見て刷新しようと思います。 ありがとうございました。
補足
CSocket/CAsyncSocketは使うべきではないということですか。 ということは、今回の件も回避策は無いということになりますね。。。 期限の面から、通信を刷新するのは かなり厳しいので、出来れば、今回はこの点だけを 修正できることが希望だったのですが、 仕方がないのでしょうね。