[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,如需转载请自行联系原作者

相关文章
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
C++多线程 并行与并发 了解进程和线程 浅显的进行传参,调用
|
物联网 Linux 开发者
线程函数传参|学习笔记
快速学习线程函数传参
|
C++
Windows10 VS2017 C++多线程传参和等待线程结束
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/85322164 #include "pch.
2932 0
|
测试技术 Windows
JMeter命令模式下动态设置线程组和持续时间等动态传参
背景: 1.当通过JMeter的图像化界面运行性能压测或者场景时候,JMeter界面很容易导致界面卡死或者无响应的情况(20个线程数就会卡死) 现象如下:   解决方案: jmeter -n -t D:\apache-jmeter-3.
2604 0
|
C#
C#基础知识回顾--线程传参
  在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值。如果希望传递参数给执行函数,则可以使用带参数的ParameterizedThreadStart委托,           public delegat...
897 0
<转>关于MFC的多线程类 CSemaphore,CMutex,CCriticalSection,CEvent
---------------------------------------------------线程---------------------------------------------------- CreateThread(NULL,0,(LPTHREAD_START_ROUTINE...
681 0
|
Shell 调度 数据格式
17、深入浅出MFC学习笔记,进程与线程简介
一、基本概念 1、线程是CPU的调度单位。 2、核心对象(kernel object)是系统的一种资源,系统对象一旦产生,任何应用程序都可以开启并使用该对象。系统给予核心对象一个计数值作为管理之用。     前三者用于线程的同步,file-mapping用于内存映射文件。
928 0