gpt4 book ai didi

c++ - 在 C++ 中使用线程

转载 作者:行者123 更新时间:2023-11-28 00:03:47 25 4
gpt4 key购买 nike

我需要创建两个线程,其中一个将返回偶数,另一个将返回奇数。我究竟做错了什么?

here is my console

Here is a screenshot of my functions

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;
}

最佳答案

改变这个

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());
}

为此

HANDLE h[2];
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());
  • 您在执行两次的 for 循环体内创建了 2 个线程(当您真正想要执行 2 个时,也称为 4 个线程)。
  • 您正试图将这些线程的句柄保存到一个只能包含一个元素的 HANDLE 数组中。
  • 在第二次执行循环时,您再次覆盖了 h[] 的元素,因此当您稍后等待它们完成并尝试关闭句柄时,您甚至没有关闭同一个句柄。
  • 您需要 HANDLE 数组的大小为 2,并且您需要删除第一个 for 循环(您单独传递函数指针,因此无法在循环中执行此操作,除非您将函数指针放入与 h[] 长度相同的数组)。

关于c++ - 在 C++ 中使用线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com