请问为什么在线程函数中使用窗口类的变量,会出现访问冲突的错误呢?

lydcsdn 2008-11-01 01:22:51
DWORD WINAPI Ld_FormatData(LPVOID lpParam)
{
CWinDlg *pDlg = (CWinDlg *)lpParam;
UINT PointMax=pDlg->countmax/2; ***这里发生访问冲突,countmax为CWinDlg类的一个公有变量,UNIT类型

return 0;
}
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish_gao 2008-11-02
  • 打赏
  • 举报
回复
为什么不判断一下指针的有效性呢?
if ( lpParam == NULL )这种情况呢?你没有给出你调用的代码,就不好说你传递进来的指针是否有效了。比如你要是传递一个局部的指针,多线程下可能可以用,也可能在使用前就被另一个线程释放了,要是你的控件指针是全局的就不同,不过判断这个指针的有效性是非常的有必要的。
yxz_lp 2008-11-02
  • 打赏
  • 举报
回复
pDlg多半为无效指针
glacier3d 2008-11-02
  • 打赏
  • 举报
回复
http://support.microsoft.com/default.aspx?scid=kb;en-us;147578
Description of CWnd derived MFC objects and multithreaded applications in Visual C++

可能有帮助!
lwd4210 2008-11-01
  • 打赏
  • 举报
回复
学习楼上的
wltg2001 2008-11-01
  • 打赏
  • 举报
回复
经常有人讨论这个问题,在线程中能不能用MFC的类指针,一般认为MFC大多数并不是线程安全的,所以这样用会出现问题,所以在线程中如果要处理对话框之类的最好用句柄,楼主这个变量如果是控件的关联变量,最好用句柄,保证不会出问题,如果不是的话就设为全局变量吧
hityct1 2008-11-01
  • 打赏
  • 举报
回复
pDlg所指向的对话框实例存在吗?
dch4890164 2008-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wltg2001 的回复:]
经常有人讨论这个问题,在线程中能不能用MFC的类指针,一般认为MFC大多数并不是线程安全的,所以这样用会出现问题,所以在线程中如果要处理对话框之类的最好用句柄,楼主这个变量如果是控件的关联变量,最好用句柄,保证不会出问题,如果不是的话就设为全局变量吧
[/Quote]
或者采用消息的形式也可以
不要处理变量,发消息过去,转由消息响应函数处理

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧