线程化传递字符串参数的 bool 函数
Threading a bool function passing string argument
我是线程的新手..但我了解了这个概念并且在过去几天一直在研究它。
但是现在我正在尝试创建一个调用 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;
}
然后我从其他地方调用均衡。
但是当我尝试编译它时出现以下错误:
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);`
知道如何解决这个问题吗?
非常感谢您的帮助。
您不想将指针传递给该线程函数:
std::thread analyse_dat0(analyseData, filename0); // omit the &
// address of operator
从 td::thread analyse_dat0(analyseData, &filename0);
中删除 &
,因为您需要的是引用而不是 analyseData 中的指针。
您还需要提供一个对象,因为 analyseData 不是静态的。
为什么不使用 std::thread
而不是使用 std::thread
而得到 std::future
的结果呢?这要简单得多,IMO。
Class c;
auto ft = std::async([&] { return c.analyseData("file.txt"); });
bool result = ft.get();
我是线程的新手..但我了解了这个概念并且在过去几天一直在研究它。 但是现在我正在尝试创建一个调用 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;
}
然后我从其他地方调用均衡。
但是当我尝试编译它时出现以下错误:
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);`
知道如何解决这个问题吗?
非常感谢您的帮助。
您不想将指针传递给该线程函数:
std::thread analyse_dat0(analyseData, filename0); // omit the &
// address of operator
从 td::thread analyse_dat0(analyseData, &filename0);
中删除 &
,因为您需要的是引用而不是 analyseData 中的指针。
您还需要提供一个对象,因为 analyseData 不是静态的。
为什么不使用 std::thread
而不是使用 std::thread
而得到 std::future
的结果呢?这要简单得多,IMO。
Class c;
auto ft = std::async([&] { return c.analyseData("file.txt"); });
bool result = ft.get();