gpt4 book ai didi

c++ - 如何使派生类函数作为线程的启动例程?

转载 作者:行者123 更新时间:2023-11-28 03:29:19 26 4
gpt4 key购买 nike

您好,我有以下 C++ 代码,

我在 thread.h 文件中有 MyThread 类

class MyThread
{
public:
void start();
virtual void* task() = 0;
};

我在 worker.h 文件中有 worker 类

class Worker : public MyThread
{
virtual ~Worker();
virtual void* task(); // I have implementation in worker.cpp
};

thread.cpp 文件的 start() 中使用了 pthread_create() 来创建线程,我想制作 task() 例程在 worker.cpp 中定义为开始例程。那我该怎么做呢?我应该将什么作为参数传递给 pthread_create 中的启动例程?

我已经试过了,但它给出了一个错误:

pthread_create(&(this->threadId),&(this->attr),(void *)task,NULL);                        

最佳答案

您不能将成员函数用作线程函数。您只能使用自由函数或静态成员函数,但是您可以将任意 void* 参数传递给该函数,并且可以将指向 this 的指针作为该参数传递,这允许您在该函数内调用成员函数:

class MyThread
{
public:
void start();
virtual void* task() = 0;

static void * thread_routine(void* pthis)
{
MyThread* t = static_cast<MyThread*>(pthis);
t->task();
return 0;
}
};

然后你像这样启动你的线程

void MyThread::start()
{
pthread_create(&(this->threadId),&(this->attr),thread_routine, this);
}

关于c++ - 如何使派生类函数作为线程的启动例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024839/

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