C++下多线程的创建

上一篇 / 下一篇  2012-10-12 15:52:36 / 个人分类:C++

51Testing软件测试网D.n0I k n: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 I qh0  }51Testing软件测试网M}e+V0gz`
 };51Testing软件测试网7I Zir 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软件测试网r2bCQ/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!rzc%Z0  while(1) Sleep(100);51Testing软件测试网;V#q.Y"WWl/F J
  return 1;
|O5K,iR2O9\t|0 }
0BZ_&?:c-^'Gia0 

TAG:

 

评分:0

我来说两句

Open Toolbar