【技术问题】C++多线程pthread_create error: invalid use of non-static member function

问题如下

pthread_create error: invalid use of non-static member function

先简要解释下pthread_create这个函数的各个参数:
param1: 为指向线程标识符的指针。
param2: 用来设置线程属性。
param3: 线程运行函数的起始地址。
param4: 运行函数的参数。

出错往往是第三个参数,报错的原因要求我们要将该参数设置成静态函数,但是这里有个问题 ,这个函数我们往往可能需要访问到它所属类的非静态成员变量,而设置成静态函数的话只能访问静态变量了。就如下这个例子是编译不过的

/* 错误例子 */
//StaticAddOne这个函数是HttpServer的静态成员函数
void* HttpServer::StaticAddOne(){
    this->nums ++;  //this不能出现在静态成员中,编译不通过
}

那怎么办呢,我们可以再写一个静态函数,然后把上面的AddOne放进去。注意 此时我们就不需要static来修饰AddOne函数了。

//Static_ExecAddOne这个函数是HttpServer的静态成员函数
void* HttpServer::Static_ExecAddOne(void* pThis)
{
	static_cast<HttpServer *>(pThis)->AddOne();
}

使用pthread_create的使用只需要把this指针当做参数传入就行了,如下:

pthread_create(&thread_id, NULL, Static_ExecAddOne, (void*)this);

这样就可以保证AddOne可以访问到类中的其他非静态成员变量了,同时也不会报错。

你可能感兴趣的:(C++,技术问题)