我想知道如何将结构传递给线程。我编写了一个示例应用程序,我在 main
中声明了一个结构并尝试将其传递给线程。
这是我的代码:
DWORD WINAPI Name1(LPVOID lparam)
{
data x;
x.name[15]="Sarah";
x.DOB="19/10/2007";
fputs(stdout,name,15);
fputs(stdout,DOB,15);
return 0;
}
int main()
{
struct data
{
char name[15];
char DOB[15];
};
HANDLE thread2;
DWORD threadID2;
thread2= CreateThread(NULL,0,Name1,(LPVOID *)data,0,&threadID2);
if(thread2==NULL)
{
cout<<"Couldn't Create Thread:("<<endl;
exit(0);
}
return 0;
}
不幸的是,我没有掌握将结构传递给线程的诀窍 :( 如果有人帮助我,我将不胜感激。
我试图更改结构的数据类型以传递它,但是,我想我不知道该怎么做。
最佳答案
您正在将局部变量传递给线程启动函数。一旦变量超出范围,它将被销毁。这意味着当新线程试图访问它时它可能不存在。您应该为整数类型按值传递或在动态存储(堆)中分配对象。
一旦新线程有了指向对象的指针,它也应该负责销毁它。这完全取决于您希望如何分配和管理对象的所有权。
struct Foo
{
char name[15];
char DOB[15];
};
void Start()
{
Foo *someObject = new Foo();
CreateThread(NULL, 0, threadFunc, (LPVOID *)someObject, 0, &threadID2);
}
DWORD WINAPI threadFunc(void *v)
{
Foo *someObject = static_cast<Foo*>(v);
delete someObject;
return 0;
}
关于c++ - 将结构传递给线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16165859/