linux 之 pthread_create 实现类的成员函数做参数

        在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static !

        在C语言中,我们使用pthread_create创建线程,线程函数是一个全局函数,所以在C++中,创建线程时,也应该使用一个全局函数。static定义的类的成员函数就是一个全局函数。

class Thread
{
    private:
        pthread_t pid;
    private:
        static void * start_thread(void *arg) //静态成员函数只能访问静态变量或静态函数,通过传递this指针进行调用
        {
            Thread *ptr = (Thread *)arg;
            ptr->fpConnectionRunning();  //线程的实体是run
        }
    public: 
        int start()
        {
            if(pthread_create(&pid,NULL,start_thread,(void *)this) != 0) //´创建一个线程(必须是全局函数)
            {    
                return -1; 
            }    
            return 0;
        }
        
        virtual void fpConnectionRunning() = 0; //基类中的虚函数要么实现,要么是纯虚函数(绝对不允许声明不实现,也不纯虚)
};

class SlamData:public Thread
{

public:
    SlamData(){
            if(start()==-1){        
            std::cout<<"pthread_create error ..."<<std::endl;
          }
        }
    ~SlamData();
    
    void fpConnectionRunning();  //实现fpConnectionRunning
        
};

                

 

posted @ 2019-12-16 12:00  玥茹苟  阅读(1507)  评论(0编辑  收藏  举报