pthread_create in class method

pthread_create can not use class normal methods directly, but can use static methods. Here is a example:

//g++ -o test test.c -lpthread
#include <iostream>
#include <pthread.h>
using namespace std;
class Testing
{  
private:
      //cLog* m_Log;
      pthread_t tid; // would one suffice?    // std::vector<pthread_t> tids ; ?     
public:
      Testing( );
      ~Testing( );
      void floodLog( int nThreads );    

private:      
      void* writeToLog( void* ); 
      static void* thread_fun( void* args ) ;
      struct thread_fun_args      
      {
              Testing* This ;        // other args as required; in this case        
              void* actual_arg ;        
              thread_fun_args( Testing* t, void* p ): This(t), actual_arg(p) {}      
      };
};
Testing::Testing( )
{
     cout << "Called constructor of Testing...\n";
}

Testing::~Testing( )
{
    cout << "Called Desconstructor of Testing...\n";
}

void* Testing::writeToLog( void* )
{
    return NULL;
}
              
void Testing::floodLog( int nThreads )
{
  cout << "Flooding cLog class with " << nThreads << " threads.\n";
  for( int i = 0; i < nThreads; i++ )
  {
    cout << "Created Thread: " << ( i + 1 ) << endl;
    pthread_create( &tid, NULL, &Testing::thread_fun, 
                            new thread_fun_args(this,0) );
  }
  cout << "Finished flooding.\n";
}

void* Testing::thread_fun( void* pv )
{
    thread_fun_args* tf_args = static_cast<thread_fun_args*>(pv) ;
    Testing* This = tf_args->This ;
    void* args = tf_args->actual_arg ;
    void* result = This->writeToLog( args ) ;
    delete tf_args ;
    return result ;
}
int main()
{
    Testing t;
    t.floodLog(2);
    return 0;
}
Cited from http://www.daniweb.com/forums/thread115838.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值