开发者社区> shy丶gril> 正文

[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在头文件里面声明即可,再次断点发现数据正常。

 

  三、测试代码下载

    /Files/over140/2010/5/AfxThreadLesson.rar

 

结束语

  问题比较隐蔽,因为之前就是使用指针方式调用,后来改成对象调用才出的问题,所以猜出来的,目前原理还不太明白。


转载:http://www.cnblogs.com/over140/archive/2010/05/24/1742476.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何解决MFCO42D.dll 0xC0000005:Access Violation问题
如何解决MFCO42D.dll 0xC0000005:Access Violation问题 一.问题的提出: 在甲电脑,就是笔者的电脑,程序可以正常运行; 但是在乙电脑,就是同事的电脑,程序运行却出现(MFCO42D.DLL):0xC0000005:Access Violation错误信息。
888 0
深入浅出Win32多线程程序设计-【4】MFC的多线程
  1、创建和终止线程  在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。  工作者线程 CWinThread *AfxBeginThread( AFX_THR...
928 0
has been modified since the precompiled header问题的几种解决方案
有时候不小心就报了这个错误,在以下步骤中,只有没解决问题的情况下,才继续往下操作: Clean工程 按住option键,再次Clean(Clean Build Folder.
713 0
解决direct path read 与 direct path write问题
1.这个问题主要与sort有关。 2.确定对象的sql: SELECT segment_name, partition_name, p1, p2, wait1.
710 0
pip 安装库失败问题:Retrying (Retry(total=4, connect=None, read=None, redirect=None, status =None)),原因及解决办法
pip 安装库失败问题:Retrying (Retry(total=4, connect=None, read=None, redirect=None, status =None)),原因及解决办法
234 0
+关注
1878
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载