在C語言下面,創建多線程不是很復雜,直接調用win32的CreateThread函數就可以了。但是怎麼用C++創建多線程確實是一個問題。一方面,創建線程中的函數指針不能是成員函數,一方面我們希望可以把成員函數當作是線程的入口函數,這中間應該怎麼調和呢?
我想,要想做到這一點可以充分利用C++語言的兩個特性,一個是this指針,一個就是靜態函數。利用this指針可以傳遞入口參數,而靜態函數解決的是入口地址的問題。如果再加上C++的多態特性,那就更加完美了。
下面的代碼是我個人的想法和思路,歡迎多提寶貴意見。
#include <stdio.h>
#include <windows.h>
class data{
public:
data() {}
virtual ~data() {}
virtual void run() { printf(“this is data!\n”);}
static unsigned long __stdcall func(void* param){
((class data*)(param))->run();
return 1;
}
void create_thread(){
CreateThread(NULL, 0, data::func, this, 0, NULL);
}
};
class test: public data{
public:
test() {}
~test() {}
void run() {printf(“this is test!\n”);}
};
int main(int argc, char* argv[])
{
data d, *p;
test t;
p = &d; p->create_thread();
p = &t; p->create_thread();
while(1) Sleep(100);
return 1;
}