首页UC › 线程-调用类成员函数

线程-调用类成员函数

   其实在signal中碰到过同样的问题,signal没办法使用类的成员函数,当时没能解决,不过今非昔比了,哈哈~~~

**************************************************************************************************

   如果试图直接使用C++的成员函数作为回调函数将发生 错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数 从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员。由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会因为隐含的this指针使得函数参数个数不匹配,从而导致回调函数安装失败。要解决这一问题 的关键就是不让this指针起作用,通过采用以下两种典型技术可以解决在C++中使用回调函数所遇到的问题。这种方法具有通用性,适合于任何C++。

以上内容摘自:http://www.cnblogs.com/this-543273659/archive/2011/08/17/2143576.html

**************************************************************************************************

下面是一个简单的例子:
17 class TestThread
18 {
19 private:
20   struct ThreadParam
21   {
22     TestThread *myself_;
       //其它地需要传入的参数
23   };
24 public:
25   void runThread();
26 private:
27   static void *threadFunction(void *threadParam);
28   int function();

29 };
30
31 void TestThread::runThread()
32 {
33   pthread_t thread;
34   ThreadParam threadParam;
35  
36   //pass the this into threadFunction
37   threadParam.myself_ = this;
38   pthread_create(&thread , NULL , threadFunction,
39                 (ThreadParam*)&threadParam);

40   sleep(1);    
41 }
42
43 void *TestThread::threadFunction(void *threadParam)
44 {
45   ThreadParam *thread = (ThreadParam*)threadParam;
46   thread->myself_->function();

47   return NULL;
48 }
49
50 void TestThread::function()
51 {
52   cout<<“hello world”<<endl;
53 }
54 
56 int main()
57 {
58   TestThread chenHuan;
59   chenHuan.runThread();
60 }

发表评论