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

C++ Pass global list to thread

我目前正在使用 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);
}

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

您正在此处创建列表的副本:

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

试试这个

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