求教有关STL库中Map模板在线程间的应用

ian_0126 2010-11-17 08:02:31
我用代码来简单描述遇到的问题,代码是临时敲的,不能运行的只是描述问题
UNIT Thread(LPVOID lparam);
class MyDialog: public CDialog
{
public:
std::map< string, int > siMap;
CreateThread(){AfxBeginThread(Thread,……);}//创建线程
}
在MyDialog的OnInitialize()函数中对siMap进行初始化
siMap["A"] = 1;

UNIT Thread(LPVOID lparam)
{
MyDialog *pMyDlg = (MyDialog*)::FromHandle(HWND(lparam));
int res = pMyDlg->siMap["A"];
return 0;
}
int main()
{
MyDialog dlg;
dlg.DoModle();
dlg.CreateThread();
return 0;
}
我的程序是在VC6.0下基于对话框的程序
当运行到 int res = pMyDlg->siMap["A"];句代码时提示内存非法访问。。加了临界区还是报同样的错误。。。
将siMap设为全局的运行正确……
求朋友们帮忙解答下,谢谢!

...全文
100 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ian_0126 2010-11-18
  • 打赏
  • 举报
回复
我知道是为什么了,只要搞清楚HWND Window Object Windows Window 三者之间关系
以及GetSafeHwnd()的机制就很明白了
结贴!
ian_0126 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gules 的回复:]
这样写试试:
AfxBeginThread(Thread,(LPVOID)this); //修改成这样
Thread函数中:
MyDialog *pMyDlg = (MyDialog*)lparam; //这里要修改成这样
[/Quote]

哇哈哈。。。。。厉害。。。。
大虾能告诉我这是为什么么?
gules 2010-11-17
  • 打赏
  • 举报
回复
这样写试试:
AfxBeginThread(Thread,(LPVOID)this); //修改成这样
Thread函数中:
MyDialog *pMyDlg = (MyDialog*)lparam; //这里要修改成这样


ian_0126 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gules 的回复:]
AfxBeginThread(Thread,……); // 能把这句贴全么?
[/Quote]
AfxBeginThread(Thread,GetSafeHwnd());
多谢关注!
gules 2010-11-17
  • 打赏
  • 举报
回复
AfxBeginThread(Thread,……); // 能把这句贴全么?

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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