C 成員函式作為 執行緒函式

2021-08-25 23:31:13 字數 1172 閱讀 6606

一般來說,用靜態函式是可以了.

但是嘗試下用成員函式.呵呵.

h檔案

// cclientdlg 對話方塊

class cclientdlg : public cdialog

;

cpp檔案

//_beginthread 用,符合__cdecl call

union proc;

//_beginthreadex 用,符合__stdcall call

union proc1;

//開始按鈕

void cclientdlg::onbnclickedcnn()

struct sockaddr_in serv_addr;

serv_addr.sin_family=af_inet;

serv_addr.sin_port=htons(5000);

serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //inet_addr轉換為網路位元組序

if(connect(myclient,( struct sockaddr *)&serv_addr,sizeof(struct sockaddr))!=0)

_beginthread( cclientdlg::myproc, 0, null );

proc.memberproc = &cclientdlg::testproc;

//呼叫的時候,必須傳this指標.對於類成員,其實隱藏第乙個引數就是this指標.

_beginthread(proc.threadproc, 0, this);

proc1.memberproc = &cclientdlg::testproc1;

_beginthreadex(0,0,proc1.threadproc,this,0,0);

//函式也是乙個位址罷了,雖然有些時候編譯器不能轉換,但是本質是不變的,只是乙個int值,其實用彙編更容易實現.上面的union就是為了解決編譯器編譯出錯的.

}//成員 執行緒函式

unsigned int __stdcall cclientdlg::testproc1(void *)

void cclientdlg::testproc(void *)

類成員函式作為執行緒函式

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指標的傳遞問題總結 1 cdecl成員函式 通過ecx傳遞this指標 mov ecx,物件的位址 call 成員函式 2 stdcall成員函式 通過堆疊傳遞this指標 push 物件的位址 call 成員函式 用非靜態成員作為執行緒函式 原理分析 1.該執行緒的主函式為類的非靜態成...