MFC 多线程编程注意事项(1)发表日期:2010-12-17 1,表现——错误示例 关于启动线程时传输窗口对象(指针
)的问题: 在选择菜单中的开始线程后: void cmainframe::onmenu_start() {
afxbeginthread(mythread, this);
} 线程函数如下: uint mythread(lpvoid pparam) { cmainframe* pmainfrm = (cmainframe *)pparam;
} 问题一: 这样的代码是不是有问题
(文档中说线程间不能直接传输mfc 对象的指针,应该通过传输句柄实现) 问题二: 这样使用开始好像没有问题,直接通过pmainfrm 访问窗口中的view 都正常
但发现访问状态条时: pmainfrm->m_wndstatusbar
setpanetext(2, "test); 出现debug assertion failed
(在窗口线程中没有问题) 位置是wincore
cpp 中的 assert((p = pmap->lookuppermanent(m_hwnd))
= null || (p = pmap->lookuptemporary(m_hwnd))
= null); 为什么访问view 能正常,但访问状态条时不可以呢
问题三: 如果通过传输句柄实现,怎样做呢
我用下面的代码执行时有问题: void cmainframe::onmenu_start() {
hwnd hwnd = getsafehwnd(); afxbeginthread(mythread, hwnd);
} uint mythread(lpvoid pparam) { cmainframe* pmainfrm = (cmainframe *)