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
類成員函式作為執行緒函式
include windows.h include class exampletask void exampletask taskmain lpvoid param void exampletask starttask int main int argc,char argv 出現編譯錯誤 error...
類成員函式作為執行緒函式
黙 座 類成員函式作為執行緒函式 2011 01 10 14 54 43 分類 windows 字型大小 訂閱 類成員函式不能作為執行緒函式 一般來說,c 的類成員函式不能作為執行緒函式。這是因為在類中定義的成員函式,編譯器會給其加 上this指標。請看下列程式 include windows.h ...
類成員作為執行緒入口函式
把類成員函式宣告為友元函式。函式實現在類外實現。一定要這樣。不然用其他奇葩少見的方法獲取類成員函式的位址,會造成不可預料的後果。執行緒入口函式的上下文引數傳入this指標,以便訪問類的proteted和private成員。以下是示例 1 定義控制台應用程式的入口點。23 include stdafx...