gpt4 book ai didi

c++ - 使用数组循环启动多个线程,传递不同的参数,并返回 WaitForMultipleObjects 的句柄

转载 作者:行者123 更新时间:2023-11-28 08:20:33 25 4
gpt4 key购买 nike

我想使用 WaitForMultipleObjects 进行测试,为此我想启动多个线程,使用循环,每个线程传递不同的 ThreadArgs。

(本质上只是一个包含五个 ThreadArg 和五个 HANDLE 的数组?)

当我尝试创建结构或 HANDLE 的数组时,两者都不起作用,并且我收到错误消息“无法为两者分配大小为 0 的常量数组”,以及“正在初始化”:无法从“转换” HANDLE' 到 'HANDLE []'' 对于后者。

关于结构,数组是否是执行此操作的合适方法? (另外,请注意 - 它必须保留一个结构,因为它最终将包含六个成员,我只是试图首先让它以更简单的形式工作,因为添加这些成员应该非常简单)

而且我假设一组句柄是执行此操作的最佳方法,但我该如何声明一个句柄?

谢谢!

#include <windows.h>
#include <iostream>
#include <process.h>


struct ThreadArgs
{
int id;
};

ThreadArgs args = {1};


unsigned int __stdcall MyThread(void *data)
{
std::cout << "Hello World!\n";
ThreadArgs *args = (ThreadArgs *) data;

std::cout << (*args).id;

return 2;
}

int main()
{

HANDLE hThread = (HANDLE) _beginthreadex(NULL, 0, MyThread, &args, 0, NULL);

WaitForSingleObject(hThread, INFINITE);


while(true);

}

以上是我目前的代码。

我尝试使用 -

创建一个 HANDLE 数组
HANDLE hThread[5]; 

编辑:

错误在这一行,当它被修改为 HANDLE[5] 的数组时 -

HANDLE hThread[0] = (HANDLE) _beginthreadex(NULL, 0, MyThread, &args, 0, NULL); 

最佳答案

您需要使用 WaitForMultipleObjects并向其传递一个句柄数组以等待多个线程完成。查看 example在这里。

#include <windows.h>
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
using std::endl;

CRITICAL_SECTION cs;

struct ThreadArgs
{
int id;
};

VOID MyThread(void *data)
{
EnterCriticalSection(&cs);
ThreadArgs *args = (ThreadArgs*)data;
cout << args->id << endl;
LeaveCriticalSection(&cs);
}

int main()
{
InitializeCriticalSection(&cs);

vector <HANDLE> T;

DWORD id;

ThreadArgs args[5] = {1, 2, 3, 4, 5};

for (int i = 0; i < 5; i++)
{
T.push_back(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MyThread, &args[i], 0, &id));
}

WaitForMultipleObjects(5, &T[0], TRUE, INFINITE);

DeleteCriticalSection(&cs);
}

关于c++ - 使用数组循环启动多个线程,传递不同的参数,并返回 WaitForMultipleObjects 的句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5977169/

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