如何将成员函数作为pthread start_routine传递
How to pass a member function as pthread start_routine?
我得到了:
void* xxx::yyy(void* ThreadIdPtr)
现在我这样做:
pthread_create( &tp, NULL, xxx::yyy, (void*) &i);
但编译错误:
error: argument of type 'void* (xxx::)(void*)' does not match
'void* (*)(void*)'
如何正确传递?
指向成员函数的指针是而不是指向函数的指针。两者根本不一样。正在尝试将指向成员函数的指针用作指向函数的指针。。。好吧,你所能期望的最好的结果就是它能迅速干净地坠毁。
虽然它可能不是技术上定义的行为,但至少有一个合理的机会可以使用指向静态成员函数的指针。然后,您可以将指向对象的指针作为参数传递,它可以调用该对象的适当成员函数。
除此之外,您可以使用pthreads期望的普通函数,并使用它完成操作
如果你想把成员函数传递给一个接受函子的函数,你应该这样做:
MyClass a;
some_function(&MyClass::MyMethod, a);
stdlib中的每个将指针指向函数的函数都有重载来获取成员函数。如果你想在std::thread-cotr中传递它,可以这样做:
std::thread(&MyClass::MyMethod, a, arg1, arg2);
相关文章:
- 在Google Kick start中提交时出错
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 在 c++11 中为 pthread 设置调度参数
- 如果不包含 pthread,为什么 GCC 的线程标准库实现会抛出异常?
- C++生成文件错误"implicit entry/start for main executable"
- Valgrind 在 QThread::start() 上报告内存泄漏
- pthread只有在线程数量较少时才可以正常工作
- pthread执行时间比顺序执行时间差
- 为什么我不能调用 QMetaObject::invokeMethod(&threadObj, &QThread::start, Qt::QueuedConnection)?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- 使用 -pthread 如何不违反 ODR 规则?
- 使用 pthread 的多线程
- 销毁 pthread 互斥体和 C++ 中的取消初始化顺序
- 函数 AfxEndThread 中的读取访问冲突"pThread-> was nullptr"
- 锁定步进pthread互斥
- Pthread段错误,使用指向main中变量的指针
- pthread导致的内存泄漏
- GCC:--静态链接到pthread的整个存档配方在最近的GCC版本中停止工作
- 正确地编写一个类,并将pthread与vlc库和c++一起使用
- 将类方法作为 pthread start 函数传递