C++下多线程的创建
上一篇 /
下一篇 2012-10-12 15:52:36
/ 个人分类:C++
51Testing软件测试网D.n0Ikn:fM/J8sy(\N 在C语言下面,创建多线程不是很复杂,直接调用win32的CreateThread函数就可以了。但是怎么用C++创建多线程确实是一个问题。一方面,创建线程中的函数指针不能是成员函数,一方面我们希望可以把成员函数当作是线程的入口函数,这中间应该怎么调和呢?
{n0Te^ bq051Testing软件测试网4gV0qu g:yf 我想,要想做到这一点可以充分利用C++语言的两个特性,一个是this指针,一个就是静态函数。利用this指针可以传递入口参数,而静态函数解决的是入口地址的问题。如果再加上C++的多态特性,那就更加完美了。51Testing软件测试网Ksl(Yg3p&OW
51Testing软件测试网!`(}dv7g&\ 下面的代码是我个人的想法和思路,欢迎多提宝贵意见。
1U\
Oi$H"@Sn0 #include <stdio.h>51Testing软件测试网\|zu$n0|Xn
#include <windows.h>51Testing软件测试网
P3m
n)`3Oo"P\-XY
51Testing软件测试网T P^%K;pYH
class data{
u9g*}"A?0 public:
J/[k3b$w0 data() {}51Testing软件测试网#QI8ue2j
virtual ~data() {}
l2Z
P(Q/SY
RcLA0 virtual void run() { printf("this is data!\n");}
vF1f4P&z-Ck0 static unsigned long __stdcall func(void* param){51Testing软件测试网|0?Ez$|.t\H1]
((class data*)(param))->run();51Testing软件测试网D+R|v;j!BG
return 1;51Testing软件测试网t4V|?d#@A
}51Testing软件测试网*@pD$lu/q
51Testing软件测试网 dWD!H1DRn!T
void create_thread(){
nA2o7m:k(z1w0 CreateThread(NULL, 0, data::func, this, 0, NULL);
mS3n3n:A
Iqh0 }51Testing软件测试网M}e+V0gz`
};51Testing软件测试网7I
Z ir iB
;N2L B p ~7h0 classtest: public data{
9h2X:\%h
uh-v1h0 public:51Testing软件测试网f`}5B-^6J6V
test() {}51Testing软件测试网C#JCW$jPD,O0@
~test() {}
'vq(U\'d.x0
@$~J:`y
}.b SmU f*_0 void run() {printf("this is test!\n");}
J#Z+lf_\ V0 };
HC!D,]8\2Mw0e8Z.D0 51Testing软件测试网G3l1Zq@ x
int main(int argc, char* argv[])
$}.{2Y A6W0 {51Testing软件测试网r2b CQ/S2q o_
data d, *p;51Testing软件测试网:l
l GC`rCP
test t;51Testing软件测试网!yd;Y%k1aHO
B
oO;[{,C^A|0 p = &d; p->create_thread();
"L4z-y;x%_!c"f0 p = &t; p->create_thread();51Testing软件测试网L*s*iJ4A`
0A(q;j6I^i.I!r zc%Z0 while(1) Sleep(100);51Testing软件测试网;V#q.Y"WWl/F
J
return 1;
|O5K,iR2O9\t |0 }
0BZ_&?:c-^'Gia0
收藏
举报
TAG: