线程池的 lambda 函数内的编译器错误变量"未捕获"
Compiler Error variable "Not captured" inside lambda function for threadpool
我正在学习c++中的多线程,并试图设置线程池,但收到一个编译器错误,称"错误:未捕获'mapperNodes'"answers"错误:没有捕获'command'"。我读过一些关于使用"this"来捕获lambda中的变量的文章,但到目前为止,一切都不起作用。
如何在下面的代码中使用线程池lambda函数中的命令和mapperNoders变量?
void MapReduceServer::spawnMappers() throw() {
vector<string> mapperNodes(nodes);
random_shuffle(mapperNodes.begin(), mapperNodes.end());
string command = buildCommand(mapperNodes[0], executablePath, mapperExecutable, mapOutputPath);
ThreadPool pool(numMappers);//numMappers = 8
for (size_t id = 0; id < numMappers; id++) {
pool.schedule([id] {
cout << oslock << "Thread (ID: " << id << ") has started." << endl << osunlock;
spawnWorker(mapperNodes[0], command); /*compiler error here*/
cout << oslock << "Thread (ID: " << id << ") has finished." << endl << osunlock;
});
}
在编写pool.schedule([id]{ /*...*/ });
时,您告诉编译器,您的lambda只需要id
变量值的副本,而不需要其他内容。
要使MapReduceServer::spawnMappers()
的所有变量(的副本)对lambda可用,可以将[id]
更改为[=]
。
相关文章:
- 修复未初始化的局部变量错误
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 如何修复C 中向量的过载变量错误
- GUI QT全局变量错误
- 全局变量错误C
- GetFieldValue用于时间变量错误
- 变量错误:未知类型名称
- 在变量错误中浮动
- 无法使用函数变量?错误表达式必须具有类类型
- 计数器变量错误
- 初始化 cpp 文件中的私有静态成员变量.错误:成员是私有的
- 在 GetTransfer 之后,我在帐户 1 收到未分配变量错误。我无法弄清楚我搞砸了什么逻辑错误
- 变量错误的重新定义
- 在 C++ 中传递 int 变量 - 错误检查不返回值
- 未使用的变量错误,或者应该是错误
- C++外部矢量变量错误
- c模板成员变量错误
- c++中的全局变量错误LNK2020
- vc++类.静态变量错误,外部符号无法解析