gpt4 book ai didi

c++ - 将结构传递给线程

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:10 24 4
gpt4 key购买 nike

我想知道如何将结构传递给线程。我编写了一个示例应用程序,我在 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/

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