掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
MFCのマルチスレッドでCStringArrayを操作するには? (ID:68665)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になっております。VC++ 6 MFC (OSはXP)を使っています。 CInternetSession/CHttpConnection/CHttpFileを使って サーバと通信するアプリを作っています。 そこで、通信待ちの際にプログレスバーを表示したいと考えてます。 AfxBeginThreadを使ってワーカスレッドを作成し、通信を行い、 メインスレッドでプログレスバー用ダイアログを呼ぶことにしました。 しかし、作成したスレッド側でアサートに引っ掛かってしまいます。 CString::CString(const CString& stringSrc) { ASSERT(stringSrc.GetData()->nRefs != 0); // ←エラー 呼び出し側は、 CString strData = This->data.GetAt(0); となっています。 どうすれば、このエラーを回避出来るのでしょうか? 重要だと思う箇所を抜粋したソースを載せます。 class CHttpHoge { CStringArray data; // 送信データ CCriticalSection criticalSection; // クリティカルセッション static UINT Connect(LPVOID); // マルチスレッド用 CStringArray response; // 受信データ // (略) public : void GetRequest(CStringArray&); // 送受信関数 BOOL Lock() { return criticalSection.Lock(); } BOOL Unlock() { return criticalSection.Unlock(); } // (略) }; void CHttpHoge::GetRequest(CStringArray& response) { AfxBeginThread(Connect, this); response.Copy(this->response); return; } /* static */ UINT CHttpHoge::Connect(LPVOID pParam) { CHttpHoge *This = static_cast<CHttpHoge *>(pParam); This->Lock(); // 処理( This->data を操作すると落ちる ) This->Unlock(); return 0; } かなり行き詰ってしまっております。 直接の解決方法でなくても構いませんので、 宜しくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.