创建线程来处理多个对象C ++

时间:2015-06-10 13:13:11

标签: c++ multithreading loops for-loop

首先让我说你是一个伟大的社区。我已经访问了这个网站数百次,我总是得到帮助!

但是,我仍然很擅长编程,有些东西我无法在互联网上找到答案,所以我会在这里问一下,看看能否得到一些帮助。另外,我的英语不是很好所以我提前道歉,我希望你们理解我的问题:

我需要用C ++做一个多线程程序来创建最多5个线程来处理一个带有100个对象的std :: vector。所以这是我的问题:我应该如何创建循环?为了创建5个线程,每个线程处理一个对象。因此,当线程完成时,它可以继续下一个。

void * threaded_objectProcessor (void *voidArg)
{
//process the object
}


main()
{
//beginning of my code


    for (std::vector<myObject>::iterator it = myVector.begin(); it != myVector.end(); it++)
    {
        //don't know what to do here
    }    
//rest of my code
 }

我希望我能够解释自己,并且提前谢谢你们,欢迎任何帮助。

Antirreni91

1 个答案:

答案 0 :(得分:0)

简单的解决方案是使用openmp库。它需要-fopenmp编译器标志,您的应用程序必须链接到libgomp库。 您的代码也需要修改:

for (std::vector<myObject>::iterator it = myVector.begin(); it != myVector.end(); it++)
{
    //don't know what to do here
}

必须更改为编译器的definitive-end-condition。完成所有更改后,您的代码将如下所示:

const size_t count = myVector.size();
#pragma omp parallel for num_threads(5)
for (size_t i = 0; i < count; ++i) {
    // or change this how you want to work with your vector
    threaded_objectProcessor(myVector[i]);
}