gpt4 book ai didi

c++ - pthread 运行函数在类中私有(private)

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:19 24 4
gpt4 key购买 nike

我正在编写一个带有 pthreads 的类,带有它的头文件和 .cpp 定义文件。

在 .h 中我有:

class test
{
public:
int a;
...
private:
typedef void (*myfunc)(void *p);
static myfunc pthreadRun;
}

在 .cpp 中我有:

...
typedef void (*myfunc)(void *p);
myfunc test::pthreadRun
{
this->a = 10;
pthread_exit(NULL);
}
...

我得到一个错误:void (* test::pthreadRun)(void*) is not a static member of class test,还有一堆其他错误, 但这是第一个。

我很困惑,因为它被声明为静态的:/

pthreadRunpthread_create()

的线程运行函数

我错过了什么?

最佳答案

很难准确猜测您要做什么,但首先我想我会像这样重写您的代码:

class test
{
public:
int a;
...
private:
static void pthreadRun(void *p);
}

void test::pthreadRun(void *p)
{
// this->a = 10; This line is now a big problem for you.
pthread_exit(NULL);
}

所以这就是您正在寻找的结构类型,尽管您无法从此上下文访问成员元素(例如 this->a),因为它是一个静态函数。

通常处理这个问题的方法是用 this 指针启动线程,这样在函数中你可以:

void test::pthreadRun(void *p)
{
test thistest=(test)p;
thistest->a=10; //what you wanted
thistest->pthreadRun_memberfunction(); //a wrapped function that can be a member function
pthread_exit(NULL);
}

您应该能够将所有这些函数设为私有(private)/ protected (假设您从此类中启动线程,我认为这样做可能更可取。

关于c++ - pthread 运行函数在类中私有(private),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15155689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com