线程化bool函数传递字符串参数

时间:2015-03-10 18:49:48

标签: c++ multithreading c++11 argument-passing

我是新工作线程..但我得到了这个概念并且在最后几天一直在玩它。 但是现在我正在尝试创建一个调用bool函数并将字符串作为参数传递的线程。代码基本上是:

bool className::analyseData(const std::string& filename) {
  ...
  return true;
}

bool className::equalise(...) {
  ...
  const std::string filename0 = filenameBase + "_chip" + ss.str() + "_0";
  std::thread analyse_dat0(analyseData, &filename0);
  ...
  return true;
}

然后我从其他地方调用equize。

但是当我尝试编译它时,我收到以下错误:

SpidrEqualisation_multi_threading.cpp:140:50: error:
no matching function for call to ‘std::thread::thread(<unresolved overloaded function type>, const string&)
     

std :: thread analyse_dat0(analyseData,filename0);`

关于如何解决这个问题的任何想法?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您不希望传递指向该线程函数的指针:

  std::thread analyse_dat0(analyseData, filename0); // omit the &
                                                    // address of operator

答案 1 :(得分:1)

为了不使用std::thread,为什么不使用std::async并将结果作为std::future?这比IMO要简单得多。

Class c; 
auto ft = std::async([&] { return c.analyseData("file.txt"); });    
bool result = ft.get();

答案 2 :(得分:0)

&移除td::thread analyse_dat0(analyseData, &filename0);,因为您希望引用而非analyseData中的指针。
此外,您还需要提供一个对象,因为analyseData不是静态的。