gpt4 book ai didi

C++ 将全局列表传递给线程

转载 作者:行者123 更新时间:2023-11-28 06:24:27 26 4
gpt4 key购买 nike

我目前正在使用 Windows 线程库。我想将一个全局列表作为参数传递给我的一个子线程并将其推送到该列表(允许我的主线程访问它)。

这基本上是我所拥有的:

std::list<SOCKET> mylist;
typedef struct {
std::list<SOCKET>* listPtr;
SOCKET listenSocket;
} buffer;

main_thread() {
...
Set up SOCKET socket = listen(...)
...

buffer* buf = new buffer();
buffer->listPtr = &mylist;
buffer->listenSocket = socket;
CreateThread(NULL, 0, child_thread, (void*)buffer, NULL, NULL);
}

child_thread(void* args) {
buffer* buf = (buffer*) args;
std::list<SOCKET> list = *(buf->listPtr);
list.push_back(NULL);
}

问题是在我在子线程中更改我的列表后,主线程看不到任何这些更改。我不明白为什么不,我正在将我的全局列表的地址传递到我的子线程中,所以我在子线程中对这个列表所做的任何事情都应该反射(reflect)在我的全局列表中,对吗?

最佳答案

您正在此处创建列表的拷贝:

std::list<SOCKET> list = *(buf->listPtr);

试试这个

std::list<SOCKET> *list = buf->listPtr;
list->push_back(NULL);

关于C++ 将全局列表传递给线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28747967/

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