zoukankan      html  css  js  c++  java
  • 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
            
    };
    
                    
  • 相关阅读:
    继承中类的作用域
    访问控制与继承
    虚函数与抽象基类
    定义基类和派生类
    类成员指针
    固有的不可移植特性
    局部类
    union
    嵌套类
    枚举类型
  • 原文地址:https://www.cnblogs.com/lovebay/p/12048401.html
Copyright © 2011-2022 走看看