0

我有一个例子,它描述了如何将 1 个套接字作为参数发送到新线程。

SOCKET clientSocket;
 ...

CreateThread(NULL, NULL, SexToClient, &clientSocket, NULL, &thID);
      ...}


DWORD WINAPI SexToClient(LPVOID client) {
    SOCKET clientSocket;
    clientSocket = ((SOCKET*)client)[0];
        ...   }

但现在我想用套接字数组创建另一个线程。我如何发送它们并在线程中使用?

这一行末尾的 [0] 是什么意思?在这个特定的示例中,我们只发送一个套接字并且它工作正常。

((SOCKET*)client)[0];
4

2 回答 2

1

您可以根据需要使用不同的数据作为第四个参数多次调用 CreateThread,新线程将获取该数据。

((SOCKET*)client)[0] 

只是抓住第一个元素。它将它转换为 SOCKET 指针,然后抓取第一个元素。这是另一种写法

*(SOCKET *)client;
于 2013-05-10T10:16:17.990 回答
1

您可以通过将所有参数包装到简单结构中来将任何参数传递给 CreateThread 方法。例如:

struct ThreadParams {
    std::vector<SOCKET *> sockets;
    std::string clientName;
    // more params
};

你需要做的就是在调用 CreateThread 函数之前初始化这个结构,然后传递一个指针:

ThreadParams * params = new ThreadParams();
params.setParameters();
CreateThread(, , SexToClient, params, );

DWORD WINAPI SexToClient(LPVOID arg) {
    ThreadParams * params = reinterpret_cast<ThreadParams *>(arg);
    // delete after usage;
    delete params;
}
于 2013-05-10T10:43:08.417 回答