我有一个旧的legecy ATL / MFC应用程序,有两个线程,主要是Window-Thread和Render-Thread。我的问题是我有一个与CSimpleString相关的随机,访问冲突错误;即访问冲突,0xdddddddd等...
我推断出问题是两个线程同时访问同一个字符串,一个尝试使用它来渲染(MFC主窗口 - 线程),另一个尝试更新字符串(Render-Thread)。
从MFC方面;这个班是
class CDisplay : public CStatic
{
public:
CString m_strDisplay;
...
void SetDisplay(CString str, int nMode = -1);
...
}
没有油漆覆盖,文本基本上是通过CStatic呈现的。
现在,SetDisplay方法是从Render-Thread调用的方法;它的prodominent代码是:
if (m_strDisplay != str)
{
m_strDisplay = str;
SetWindowText(str + " ");
}
我的问题在于,我需要一个关键部分;但我不知道如何让MFC方面坚持下去。
任何人都有使MFC线程安全并避免这些问题的智慧吗?
答案 0 :(得分:3)
仅在MFC主线程中进行GUI更新(SetWindowText
)。在渲染线程中,设置变量(受临界区保护)和/或发送消息,然后在MFC主线程中执行实际的GUI元素操作。