gpt4 book ai didi

c++ - 使用 _beginthreadx 将结构传递给线程

转载 作者:行者123 更新时间:2023-11-28 03:42:04 24 4
gpt4 key购买 nike

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

using namespace std;
HANDLE ghEvents;


struct DataStructure
{
int r[2];
int h;
};


unsigned __stdcall f2(void *p)
{

DataStructure *input = (DataStructure *)p;
int i = (int)input->h;
cout <<i<<endl;

}


int main()
{

HANDLE hThread[8];
DWORD i, dwEvent, dwThreadID;
unsigned threadID;
DataStructure input;

ghEvents = CreateEvent(NULL,FALSE,FALSE,NULL);

for (int i = 0; i < 8; i++)
{
input.h=i;
hThread[i] = (HANDLE)_beginthreadex( NULL, 0, f2, (void*)&input, 0, &threadID );
}

dwEvent = WaitForMultipleObjects(8,hThread,TRUE,INFINITE);

CloseHandle(ghEvents);
for (int i = 0; i < 8; i++)
{
CloseHandle( hThread[i] );
}

cin.get();
return 0;

}

输出是 77777777 而不是 12345678。

我知道我必须按值而不是引用传递输入,但它一直给我一条错误消息,正确的方法是什么?

最佳答案

这是我之前回答的后续,如果线程数在编译时已知,这是一个更好的解决方案。

DataStructure input[8];  

...

for (int i = 0; i < 8; i++)
{
input[i].h=i;
hThread[i] = (HANDLE)_beginthreadex( NULL, 0, f2, (void*)&input[i], 0, &threadID );
}

你需要返回一个值:

unsigned __stdcall f2(void *p)      
{

DataStructure *input = (DataStructure *)p;
int i = input->h;
cout <<i<<endl;
return 0;
}

关于c++ - 使用 _beginthreadx 将结构传递给线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8852997/

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