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
        
};

                

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM