1. 程式人生 > >MFC類成員函式作為執行緒函式的解決辦法

MFC類成員函式作為執行緒函式的解決辦法

Win32 API多執行緒程式設計例程中,建立執行緒的函式為:

HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
引數不再解釋,比較重要的是lpParameter,指向一個傳給執行緒函式的引數的指標!
當我們把一個成員函式作為執行緒函式時,有時候會遇到:
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
意思是說正常的成員函式不能作為執行緒函式!這時候怎麼辦呢?~
可以把要作為執行緒函式的成員函式定義成static的,如
public:
static DWORD WINAPI globalConverterFunc(LPVOID lp);
這樣,編譯可以通過!但是問題又來了,static成員不能操作非static成員變數,就是沒有this指標~
解決辦法是,建立執行緒時,傳遞一個this指標就啦~如:
HANDLE hThread;
DWORD ThreadID;

hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)globalConverterFunc,
this,
0,
&ThreadID);
這樣,在static執行緒函式裡面,做個強制型別轉換,把lp轉換成類指標,問題解決!
::::::::::::::::::::::::::::::::::::::::::::
注意!!!
在實現執行緒函式時 ,不能使用static