我正在尝试学习C ++中图像处理的多线程基础知识。我来自不同的API背景,在该背景中我经常这样做,因此我尝试使用std :: thread函数将代码移植到C ++。这是我当前的伪代码:
static const int num_threads=4;
void FilterImage (int x1, int x2, int x3, int threadNr) {
// output defined...
// Every thread calculates a different line
for (int y = 0 + threadNr; y < output->height; y += num_threads) {
// Horizontal lines
for (int x = 0; x < output->width; x++) {
// Do Stuff...
}
}
}
int main() {
std::thread t[num_threads];
int param1, param2, param3;
int i;
for (i = 0; i < num_threads; i++)
t[i] = std::thread(FilterImage, param1, param2, param3, i);
for (i = 0; i < num_threads; i++)
t[i].join;
}
但是,我无法将i
(线程ID)作为参数传递给函数。 Visual Studio不允许我。任何有关我做错了什么以及如何正确传递线程ID的指导都将受到赞赏。
我希望每个线程都处理一条图像线。
谢谢。