gpt4 book ai didi

c - 线程创建。我正在用最后一个线程覆盖所有线程

转载 作者:行者123 更新时间:2023-11-30 15:38:14 25 4
gpt4 key购买 nike

我需要为每个传入的人创建一个线程。为每个人创建一个线程效果很好。但只有最后一个线程存活。其他的都被最后一个覆盖了。我在这里做错了什么?你发现这段代码有什么问题吗?

  Person *person; 
DWORD bytesRead;

while(1)
{

person = (Person *) malloc( sizeof(Person) );
bytesRead = mailslotRead ( mailbox, &person, sizeof(Person) );
if( bytesRead != 0 )
{
list_append( planets, &person );
threadCreate(personThread, &person );
Sleep(100);
}
}


DWORD WINAPI personThread(Person* person)
{

MessageBox(0, person->name, "New thread created for:", 0);
while(1)
{
person->age += 1;
MessageBox(0, person->name, "person aged", 0);
Sleep(5000);
}

MessageBox(0, person->name, "Thread died", 0);
}

最佳答案

不要将&person传递给线程,而是传递person。变量 person 将被覆盖,并且由于线程正在访问 person 所在的位置,因此它们都将访问相同的数据。您确实希望将 person(即新分配的内存地址)传递给每个新创建的线程。

please don't cast the return value of malloc() in C .

更新:您为 personThread() 显示的代码无法正确处理其参数(它应该是 void *,强制转换到 Person ** 并取消引用),所以我认为您也在调用未定义的行为。

关于c - 线程创建。我正在用最后一个线程覆盖所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882215/

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