线程数组并尝试将多个参数传递给函数不起作用
Array of threads and attempting to pass multiple arguments to function is not working?
>我正在创建一个具有动态线程数的程序。我有一个线程的载体(谢谢,穆罕默德(;然后我尝试调用一个函数并为执行线程传递多个参数。
但是,我当前的代码给出了一个错误,我认为这是由于我对 2D 数组的奇怪用法:
在函数 'int main((' 中: 102 77 [错误] 没有用于调用的匹配函数 to 'std::thread::thread(void (&((float (([2], float, int, int(, float [((sizetype((((ssizetype(nodeNumber( + -1(( + 1(][2], float [((sizetype((((ssizetype(nodeNumber( + -1(( + 1(], int&, int&('
102 77 [注] 候选人是: 4 0
133 7 C:\程序文件 (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] 模板 std::thread::thread(_Callable&&, _Args&& ...(
133 7 C:\程序文件 (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] 模板参数推断/替换失败:
102 77 [注意] 可变大小的数组类型 'float (&)[(((sizetype((((ssizetype(nodeNumber( + -1(( + 1(][2]' 不是 有效的模板参数
4 0 在文件中包含自
128 5 C:\程序文件 (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] std::thread::thread(std::thread&&(
128 5 C:\程序文件 (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] 候选人期望 1 个参数,提供 5 个参数
122 5 C:\程序文件 (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] std::thread::thread(( 122 5 c:\program files (x86(\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++\thread [注意] 候选人期望 0 个参数,提供 5 个参数
以下是我尝试此操作的一些代码块:
#include <iostream>
#include <fstream>
#include <string>
#include <thread>
#include <vector>
using namespace std;
void map(float rank_matrix[][2], float adjacency_matrix[], int nodeNumber, int node);
int main() {
// setup code, initialization section here
float adjacency_matrix[nodeNumber][nodeNumber];
float rank_matrix[nodeNumber][2];
while(iter < terminate) {
vector<thread> threads;
for(int i = 0; i < nodeNumber; i++) {
threads.push_back(std::thread(map, rank_matrix, adjacency_matrix[i], nodeNumber, i);
}
for(int i = 0; i < nodeNumber; i++) {
threads.join();
}
// Flush out the mass for each node (will be updated based on mapper's work.
for(i = 0; i < nodeNumber; i++) {
rank_matrix[i][0] = 0;
}
iter++;
cout << endl;
cout << endl;
}
return 0;
}
// Mapper code for each individual node and computation.
void map(float rank_matrix[][2], float adjacency_matrix[], int nodeNumber, int node) {
for(int i = 0; i < nodeNumber; i++) {
if(rank_matrix[node][1] != 0 && adjacency_matrix[i] > 0)
adjacency_matrix[i] = (rank_matrix[node][0] / rank_matrix[node][1]);
}
}
关于我做错了什么有什么建议吗? 帮助将不胜感激! 谢谢!
thread myThread[nodeNumber];
这将创建许多默认初始化的线程,即不代表任何执行线程的线程。
myThread[i](map, rank_matrix, adjacency_matrix[i], nodeNumber, i);
不初始化线程。
我建议使用像本例中这样的线程向量
std::vector<std::thread> threads;
这不会创建任何实际线程。只是容纳它们的容器。
然后你可以像这样填充它:
for(int i = 0; i < nodeNumber; i++) {
threads.push_back(std::thread(map, rank_matrix, adjacency_matrix[i], nodeNumber, i);
}
myThread[i](map, rank_matrix, adjacency_matrix[i], nodeNumber, i);
倾向于在myThread[i]
上调用函数调用运算符,提供的参数不调用构造函数。 thread myThread[nodeNumber];
已经构造了线程,所以你需要做的是为数组的每个元素分配一个线程
myThread[i] = thread(map, rank_matrix, adjacency_matrix[i], nodeNumber, i);
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 如何传递带有通过引用传递的结构参数的函数?
- 如何在 c++ 中将函数作为参数传递?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 为什么我不能将引用作为 std::async 的函数参数传递
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将__device__ lambda 作为参数传递给 __global__ 函数
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 将函数作为参数传递以避免重复代码
- 如何在类(C )中作为参数传递函数