【发布时间】:2014-01-16 02:20:19
【问题描述】:
我需要创建未知数量的线程,最后希望等待所有创建的线程完成它们的工作。搜索后,我只能使用WaitForMultipleObjects(. . .) 等待一些已知数量的已创建线程,它需要指向已创建线程句柄数组的指针。以下代码是该场景的示例。
#include "stdafx.h"
#include <Windows.h>
#include <time.h>
FILE* fp;
time_t start;
struct mydata{
int a, b;
};
void myFn(mydata* p)
{
fprintf(fp, "a = %d\n", p->a);
fprintf(fp, "b = %d\n", p->b);
delete p;
}
bool condition()
{
if(time(0) - start >= 1)
return false;
return true;
}
int _tmain(int argc, _TCHAR* argv[])
{
start = time(0);
fopen_s(&fp, "outOfExe.txt", "w");
mydata* dataToGive;
int n = 0;
while(condition())
{
n++;
dataToGive = new mydata;
dataToGive->a = 2*n;
dataToGive->b = 4*n;
HANDLE WINAPI handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)myFn, dataToGive, 0, NULL);
}
}
我能想到的解决方案是创建一个大小等于 CPU 内核数的数组,并在任何给定时间以该线程数的最大值执行。但是为此我需要开发一种排队机制等。有没有办法通过上面示例中所示的方式等待所有创建的线程?
【问题讨论】:
-
有什么理由不能使用数组(或 std::vector)来存储句柄?还有为什么不使用 std::thread?
-
我已将其作为解决方案之一编写 - 但想知道是否可以在不使用数组的情况下完成。 Visual c++ 2008 不支持 std::thread(对吗?)
标签: c++ windows multithreading visual-c++ visual-studio-2008