我是新工作线程..但我得到了这个概念并且在最后几天一直在玩它。 但是现在我正在尝试创建一个调用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);`
关于如何解决这个问题的任何想法?
非常感谢你的帮助。
答案 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不是静态的。