【问题标题】:Android NDK Thread invalid use of non-static member functionAndroid NDK Thread 无效使用非静态成员函数
【发布时间】:2016-07-19 17:26:04
【问题描述】:

我需要在我的 android 应用程序中使用线程,因为我正在使用原生 opencv 进行图像处理。这是我的代码:

void Detector::processBinary(Mat &binary) {
    //do stuff
}

void Detector::Detect() {
   ...
   thread t1(processBinary, binary);
   t1.join();
}

但是,每当我尝试运行应用程序时,我都会从线程 t1(processBinary, binary) 收到错误“无效使用非静态成员函数”。然而,这条线在视觉工作室中完美运行。谁能帮我这个?提前致谢!

【问题讨论】:

  • 您在 Visual Studio 中使用哪个工具链?对于std::thread 的构造函数,成员函数不是有效的第一个参数。
  • 在 vs2015 哪里可以找到这个?

标签: android c++ multithreading opencv android-ndk


【解决方案1】:

您使用成员函数,它需要this 参数(它必须在某个对象上调用)。有两种选择:

使用静态类函数(或完全非类函数):

void processBinary(Mat &binary) {
    //do stuff
}

void Detector::Detect() {
   ...
   thread t1(processBinary, binary);
   t1.join();
}

如果我们想使用成员函数,也可以传递适当的参数:

void Detector::processBinary(Mat &binary) {
    //do stuff
}

void Detector::Detect() {
   ...
   thread t1(&Detector::processBinary, *this, binary);
   t1.join();
}

【讨论】:

  • 大部分工作。我需要添加 std::ref(binary) 以消除弹出的其他一些错误。感谢您的帮助!
猜你喜欢
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2018-01-31
相关资源
最近更新 更多