0

我有一个旧的 ATL/MFC 应用程序,它有两个线程,主窗口线程和渲染线程。我的问题是我有与 CSimpleString 相关的随机访问冲突错误;即访问冲突,0xdddddddd 等...

我推断问题是两个线程同时访问同一个字符串,一个尝试使用它来渲染(MFC 主窗口线程),一个尝试更新字符串(渲染线程)。

从 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

SetWindowText仅在 MFC 主线程中进行GUI 更新 ( )。在渲染线程中,设置一个变量(受临界区保护)和/或发送一条消息,然后在 MFC 主线程中执行实际的 GUI 元素操作。

于 2013-03-12T12:28:05.787 回答