我有一个例子,描述了如何将1个套接字作为参数发送到新线程。
SOCKET clientSocket;
...
CreateThread(NULL, NULL, SexToClient, &clientSocket, NULL, &thID);
...}
DWORD WINAPI SexToClient(LPVOID client) {
SOCKET clientSocket;
clientSocket = ((SOCKET*)client)[0];
... }
但是现在我想用套接字数组创建另一个线程。如何发送它们并在线程中使用?
这一行末尾的含义是什么?在这个特定的例子中,我们只发送一个套接字,它工作正常。
((SOCKET*)client)[0];
答案 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;
}