【发布时间】:2016-04-29 13:21:53
【问题描述】:
我需要创建两个线程,其中一个返回偶数,另一个返回奇数。我究竟做错了什么?
int _tmain(int argc, _TCHAR* argv[])
{
DWORD ID1 = 1, ID2 = 100;
DWORD arr[] = {ID1, ID2};
HANDLE h[1];
for (int i = 0; i < 2; ++i)
{
h[0] = CreateThread(NULL, 0, &f1, arr, 0, &arr[0]);
if (h[0] == NULL)
_tprintf(_T("%d"), GetLastError());
h[1] = CreateThread(NULL, 0, &f2, arr, 0, &arr[1]);
if (h[1] == NULL)
_tprintf(_T("%d"), GetLastError());
}
WaitForMultipleObjects(2, h, TRUE, INFINITE);
for (int i = 0; i < 2; ++i)
CloseHandle(h[i]);
return 0;
}
【问题讨论】:
-
对于初学者来说,
h数组只有 1 个元素,但您尝试写入其中的 2 个。 -
由于循环,您正在创建 4 个线程。删除 for 循环并将 h 更改为 'HANDLE h[2];` 以使您的数组足够大以容纳 2 个句柄。
-
@PeteBecker 确实我做到了。恐怕是坏习惯。
-
如果可以,请使用C++11 Thread Support Library。它提供了一个非常简单的线程 API,它也受益于跨平台。
-
请不要将代码发布为截图。虽然屏幕截图可以提高问题的质量,但通常可以用纯文本表示的任何内容都应该如此。屏幕截图转义文本搜索。
标签: c++ multithreading winapi