自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺析MFC多線程傳參問題

開發(fā) 后端
MFC中使用多線程比較簡單,本文主要介紹了幾種常見的問題,每一個問題通過例子做詳細(xì)的說明。下面我們一起來看。

在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。利用線程,用戶可按下一個按鈕,然后程序會立即作出響應(yīng),而不是讓用戶等待程序完成了當(dāng)前任務(wù)以后才開始響應(yīng)。MFC中使用多線程比較簡單,大家都推薦用AfxBeginThread來實現(xiàn),但使用過程中確遇到傳入this之后不能得到對象內(nèi)部字段數(shù)據(jù)的問題。

一、問題代碼

1.1 Test.h

 

  1. #pragma once  
  2. class CTest  
  3. {  
  4. public:  
  5. CTest(void);  
  6. ~CTest(void);  
  7. void ThreadMethod(HWND hWnd);  
  8. HWND m_hWnd;  
  9. };  
  10.  

 1.2 Test.cpp

 

  1. #include "StdAfx.h"  
  2. #include "Test.h"  
  3. CTest::CTest(void)  
  4. {  
  5. }  
  6. CTest::~CTest(void)  
  7. {  
  8. }  
  9. UINT ThreadProc(LPVOID lpParam)  
  10. {  
  11. CTest* test = (CTest*)lpParam;  
  12. HWND hWnd = test->m_hWnd;  
  13. return 0;  
  14. }  
  15. void CTest::ThreadMethod(HWND hWnd)  
  16. {  
  17. this->m_hWnd = hWnd;  
  18. AfxBeginThread(ThreadProc,this);  
  19. }  

 1.3 MFC主窗體方法調(diào)用

CTest test;

test.ThreadMethod(m_hWnd);

1.4 調(diào)試和說明

將斷點打到ThreadProc方法的“HWND hWnd = test->m_hWnd;”,執(zhí)行發(fā)現(xiàn)是空的,而在CTest::ThreadMethod處明明賦值了!實際中還發(fā)現(xiàn)變量類型是int可以傳遞,CString傳之后就是亂碼或非原始數(shù)據(jù)了。

二、解決辦法

將test聲明為一個指針,通過指針來調(diào)用方法,如下:

test = new CTest();

test->ThreadMethod(m_hWnd);

test在頭文件里面聲明即可,再次斷點發(fā)現(xiàn)數(shù)據(jù)正常。

問題比較隱蔽,因為之前就是使用指針方式調(diào)用,后來改成對象調(diào)用才出的問題,所以猜出來的,目前原理還不太明白。

【編輯推薦】

  1. Visual C++權(quán)威剖析--MFC的原理、機制與開發(fā)實例
  2. SQL Server mfc 數(shù)據(jù)庫類簡介
  3. 巧妙解決PHP無法實現(xiàn)多線程的問題
  4. 多線程編程您不知道的5件事

 

責(zé)任編輯:于鐵 來源: 中國IT實驗室
相關(guān)推薦

2010-02-01 17:25:09

Python多線程

2009-07-03 17:18:34

Servlet多線程

2009-08-12 18:04:44

編寫C#多線程

2010-03-03 17:44:07

Python多線程

2009-07-17 17:29:13

多任務(wù)多線程

2011-08-29 16:16:22

Lua函數(shù)多線程

2011-06-24 11:12:39

Qt 多線程 線程

2011-06-24 11:03:31

Qt 多線程 線程

2009-04-27 13:15:04

多線程方法run()

2019-09-26 10:19:27

設(shè)計電腦Java

2021-03-05 07:38:52

C++線程編程開發(fā)技術(shù)

2009-08-21 11:31:59

異步和多線程的區(qū)別

2015-12-22 10:39:52

Java多線程問題

2010-01-18 14:09:58

C++多線程

2017-01-19 10:24:38

Java多線程問題

2010-03-16 19:29:26

Java多線程操作

2013-05-29 10:47:50

Android開發(fā)Java多線程java面試題

2009-07-03 16:53:11

Servlet容器

2014-08-13 10:41:08

linux線程

2011-06-22 13:47:16

Java多線程
點贊
收藏

51CTO技術(shù)棧公眾號