作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我有以下 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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!