gpt4 book ai didi

c++ - 将对象传递给另一个线程后无法访问某些成员变量

转载 作者:行者123 更新时间:2023-11-28 00:35:25 25 4
gpt4 key购买 nike

我有一个多线程应用程序,其中对象 A 具有链表 B 的实例。将 A 传递给另一个线程后,我无法访问 B。

定义A:

struct Peer 
{
public:
...
Linked_List *message_list;
...
Peer() {
...
message_list = new Linked_List;
...
};
...
};

定义 B:

class Linked_List {
public:
...
Linked_List();
int add(string);
string get();
string get_nb();
void clear(bool);
private:
struct Node* head;
HANDLE ghSemaphoreLinkedList;
HANDLE ghSemaphoreGet;
};
struct Node {
string data;
Node* next;
};

主线程:

Peer *client = new Peer;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &SendToPeer, &client, 0, &thread);

访问线程:

DWORD WINAPI SendToPeer(Peer *client)
{
while(1)
{
//While debugging, VSC++ says it can't read the memory of client->message_list
string msg = client->message_list->get();
}
}

可能是什么问题?

问候,大卫

最佳答案

client 变量传递给 CreateThread()lpParameter 参数时,您需要删除 & 运算符>:

//CreateThread(..., &client, ...);
CreateThread(..., client, ...);

SendToPeer() 期望收到一个 Peer* 指针,但实际上您发送的是一个 Peer** 指针。

关于c++ - 将对象传递给另一个线程后无法访问某些成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21127589/

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