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

Posted Libra

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
        
};

                

 

以上是关于linux 之 pthread_create 实现类的成员函数做参数的主要内容,如果未能解决你的问题,请参考以下文章

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

多线程之pthread_create()函数

多线程之pthread_create()函数

除了 pthread_create 在 linux 上创建 linux 线程的方法

Linux 中对 pthread_create 的未定义引用

[Linux] Linux下undefined reference to ‘pthread_create’问题解决