当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
MFC多线程传参问题
发布时间:2010/5/25 10:32:46 来源:城市学习网 编辑:ziteng
  前言
  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在头文件里面声明即可,再次断点发现数据正常。
  结束语
  问题比较隐蔽,因为之前就是使用指针方式调用,后来改成对象调用才出的问题,所以猜出来的,目前原理还不太明白。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved