天天看點

[MFC]多線程傳參問題 [AfxBeginThread]

前言

  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,如需轉載請自行聯系原作者

繼續閱讀