1. 程式人生 > >執行緒 -- 類和回撥函式 [轉]

執行緒 -- 類和回撥函式 [轉]

由於在類中建立一個執行緒時要指定回撥函式的地址,這時候有兩種辦法:一是指定一個全域性的函式,二是指定類的static函式,但是如果我們想在static函式中訪問非static成員變數是個問題,可以如下來解決:

 

Thread.h

#ifndef THREAD_H_H
#define THREAD_H_H
 
class Thread
{
public:
	HANDLE m_hThread ;
	int m_num ;
 
	Thread() ;
	~Thread() ;
	void Create() ;
	static DWORD WINAPI ThreadProc(LPVOID lpParameter);
	int PrintNum() ;
};
 
#endif

Thread.cpp

#include <IOSTREAM>
using namespace std;
#include <windows.h>
#include "Thread.h"
 
Thread::Thread()
{
	m_num = 80 ;
}
 
Thread::~Thread()
{
	
}
 
void Thread::Create()
{
	::CreateThread(NULL, 0, ThreadProc, LPVOID(this), 0, NULL) ;
}
 
/*在類中static靜態函式屬於類,不屬於哪個物件,
故呼叫該函式時不會傳進this指標,即預設訪問不了非static
變數,這裡模擬傳進this指標可以使用物件的非static靜態變數*/
DWORD WINAPI Thread::ThreadProc( LPVOID lpParameter )
{
	Thread * This = (Thread *)lpParameter ;
	return This->PrintNum() ;

    //Do sth important
}
 
int Thread::PrintNum()
{
	cout << "Num的值為" << m_num << endl ;
	return 0 ;
}

Main.cpp

#include <IOSTREAM>
using namespace std;
#include <windows.h>
#include "Thread.h"
 
int main()
{
	Thread test ;
 
	test.Create() ;
	Sleep(10) ;			//讓副執行緒執行
 
	return 0 ;
}

 

From: http://blog.csdn.net/wenzhou1219/article/details/7543658