套接字数组作为CreateThread中的参数

时间:2013-05-10 10:10:16

标签: c++ multithreading winsock

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

SOCKET clientSocket;
 ...

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


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

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

这一行末尾的含义是什么?在这个特定的例子中,我们只发送一个套接字,它工作正常。

((SOCKET*)client)[0];

2 个答案:

答案 0 :(得分:1)

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

((SOCKET*)client)[0] 

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

的另一种方式
*(SOCKET *)client;

答案 1 :(得分: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;
}