MFC多线程传参问题
作者:不详 发布时间:[ 2010/5/25 18:07:14 ] 推荐标签:
前言
MFC中使用多线程比较简单,大家都推荐用AfxBeginThread来实现,但使用过程中确遇到传入this之后不能得到对象内部字段数据的问题。
正文
一、问题代码
1.1Test.h
| #pragma once class CTest { public: CTest(void); ~CTest(void); void ThreadMethod(HWND hWnd); HWND m_hWnd; }; |
1.2 Test.cpp
|
#include "StdAfx.h" |
1.3 MFC主窗体方法调用
| CTest test; test.ThreadMethod(m_hWnd); |
1.4 调试和说明
将断点打到ThreadProc方法的“HWND hWnd = test->m_hWnd;”,执行发现是空的,而在CTest::ThreadMethod处明明赋值了!实际中还发现变量类型是int可以传递,CString传之后是乱码或非原始数据了。
二、解决办法
将test声明为一个指针,通过指针来调用方法,如下:
| test = new CTest(); test->ThreadMethod(m_hWnd); |
test在头文件里面声明即可,再次断点发现数据正常。
结束语
问题比较隐蔽,因为之前是使用指针方式调用,后来改成对象调用才出的问题,所以猜出来的,目前原理还不太明白。

sales@spasvo.com