【发布时间】:2012-04-16 19:58:43
【问题描述】:
考虑下面的代码:
for (int i = 0; i < thread_number; i ++)
hThreadArray[i] = CreateThread(
0,
0,
single_thread_function_name,
(LPVOID)i,
0,
&dwThreadIdArray[i]);
WaitForMultipleObjects(thread_number, hThreadArray, TRUE, INFINITE);
它在 32 位平台上可以正常工作,但在 64 位平台上它会崩溃。
崩溃发生在 WaitForMultipleObjects 函数中。
有人知道我做错了什么吗?
编辑: hThreadArray 声明为:
HANDLE* hThreadArray;
hThreadArray = (HANDLE*) malloc (thread_number * sizeof(HANDLE));
single_thread_function_name 为:
DWORD WINAPI single_thread_function_name( LPVOID lpParam ){
.....
return 0;
}
【问题讨论】:
-
能把
hThreadArray的声明和single_thread_function_name()的代码贴出来吗? -
你是否在 hThreadArray 中存储了任何东西,或者你是否让它未初始化?
-
“它崩溃”到底是什么意思?
thread_number的值是多少?它比MAXIMUM_WAIT_OBJECTS大吗?你能提供一个失败的完整程序吗?去掉所有不需要的东西。 -
DavidHeffernan:thread_number 的值为 2,静态分配。 @bmargulies:我分配了内存空间,但我没有初始化 hThreadArray 数组。错了吗?
-
你能提供一段可重现的代码吗?从这里看起来很好(但我有一段时间没有这样做了)。
标签: c++ windows multithreading 64-bit