執行緒 -- 類和回撥函式 [轉]
阿新 • • 發佈:2018-12-20
由於在類中建立一個執行緒時要指定回撥函式的地址,這時候有兩種辦法:一是指定一個全域性的函式,二是指定類的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