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

2021-05-12 09:17:21 字數 1117 閱讀 3964

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...