前言
MFC中使用多線程比較簡單,大家都推薦用AfxBeginThread來實作,但使用過程中确遇到傳入this之後不能得到對象内部字段資料的問題。
正文
一、問題代碼
1.1 Test.h
#pragma once
class CTest
{
public:
CTest(void);
~CTest(void);
void ThreadMethod(HWND hWnd);
HWND m_hWnd;
};
1.2 Test.cpp
#include "StdAfx.h"
#include "Test.h"
CTest::CTest(void)
}
CTest::~CTest(void)
UINT ThreadProc(LPVOID lpParam)
CTest* test = (CTest*)lpParam;
HWND hWnd = test->m_hWnd;
return 0;
void CTest::ThreadMethod(HWND hWnd)
this->m_hWnd = hWnd;
AfxBeginThread(ThreadProc,this);
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在頭檔案裡面聲明即可,再次斷點發現資料正常。
本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/583024,如需轉載請自行聯系原作者