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

2021-06-11 23:47:28 字數 1215 閱讀 1887

#include "windows.h"

#include

class exampletask  

;  void exampletask::taskmain(lpvoid param)

{} 

void exampletask::starttask()  

int main(int argc, char* argv)

出現編譯錯誤:

error c3867: 'exampletask::taskmain': function call missing argument list; use '&exampletask::taskmain' to create a pointer to membe

下面code會出現與此同樣的編譯錯誤。

#include "windows.h"

#include

class exampletask  

;  void exampletask::taskmain(lpvoid param)  

{} 

int main(int argc, char* argv)

如果一定要以類成員函式作為執行緒函式,通常有如下解決方案:

(1)將該成員函式宣告為static型別,去掉this指標;

即將類定義改為:

#include "windows.h"

#include

class exampletask   ;

但是將成員函式宣告為靜態雖然可以解決作為執行緒函式的問題,但是它帶來了新的問題,那就是static成

員函式只能訪問static成員。解決此問題的一種途徑是可以在呼叫類靜態成員函式(執行緒函式)時將this

指標作為引數傳入,並在改執行緒函式中用強制型別轉換將this轉換成指向該類的指標,通過該指標訪問非

靜態成員。

(2)不定義類成員函式為執行緒函式,而將執行緒函式定義為類的友元函式。這樣,執行緒函式也可以有類

成員函式同等的許可權; 

我們將程式修改為:

#include "windows.h"

#include

class exampletask   ;

void taskmain(lpvoid param)  

void exampletask::starttask()  

int main(int argc, char* argv)

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

黙 座 類成員函式作為執行緒函式 2011 01 10 14 54 43 分類 windows 字型大小 訂閱 類成員函式不能作為執行緒函式 一般來說,c 的類成員函式不能作為執行緒函式。這是因為在類中定義的成員函式,編譯器會給其加 上this指標。請看下列程式 include windows.h ...

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

把類成員函式宣告為友元函式。函式實現在類外實現。一定要這樣。不然用其他奇葩少見的方法獲取類成員函式的位址,會造成不可預料的後果。執行緒入口函式的上下文引數傳入this指標,以便訪問類的proteted和private成員。以下是示例 1 定義控制台應用程式的入口點。23 include stdafx...

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

一般來說,用靜態函式是可以了.但是嘗試下用成員函式.呵呵.h檔案 cclientdlg 對話方塊 class cclientdlg public cdialog cpp檔案 beginthread 用,符合 cdecl call union proc beginthreadex 用,符合 stdca...