作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#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/
我对_beginthreadx函数的第三个和第四个参数有疑问: 如果我有这条线来创建线程 hThread=(HANDLE)_beginthreadex(0,0, &RunThread, &m_sock
我很想知道是否可以使用未知且不基于类设计的函数指针调用 _beginthreadex。例如: #include #include #include int myThread(void* data
#include #include #include #include #include using namespace std; HANDLE ghEvents; struct DataS
我是一名优秀的程序员,十分优秀!