0

メインのウィンドウスレッドとレンダリングスレッドの2つのスレッドを持つ古いレガシーATL/MFCアプリケーションがあります。私の問題は、CSimpleStringに関連するランダムなアクセス違反エラーがあることです。つまり、アクセス違反、0xddddddddなど...

問題は、2つのスレッドが同時に同じ文字列にアクセスすることであると推測しました。1つはそれを使用してレンダリングしようとし(MFCメインウィンドウスレッド)、もう1つは文字列を更新しようとします(レンダリングスレッド)。

MFC側から。クラスは

class CDisplay : public CStatic
{
public:
    CString m_strDisplay;
    ...   
    void SetDisplay(CString str, int nMode = -1);
    ...
}

ペイントオーバーライドはなく、テキストは基本的にCStaticを介してレンダリングされます。

現在、SetDisplayメソッドはRender-Threadから呼び出されるものです。主要なコードは次のとおりです。

if (m_strDisplay != str)
{
    m_strDisplay = str;
    SetWindowText(str + " ");
} 

ここでの私の問題は、クリティカルセクションが必要なことです。しかし、MFC側にそれを順守させる方法がわかりません。

MFCをスレッドセーフにし、これらの問題を回避するための知恵を持っている人はいますか?

4

1 に答える 1

3

SetWindowTextMFC メイン スレッドのみでGUI の更新 ( ) を行います。レンダリング スレッドで、(クリティカル セクションで保護された) 変数を設定したり、メッセージを送信したりしてから、MFC メイン スレッドで実際の G​​UI 要素の操作を実行します。

于 2013-03-12T12:28:05.787 に答える