C++ 在CreateThread中作为参数的套接字数组
我有一个exmaple wich,它描述了如何将1个套接字作为参数发送到新线程C++ 在CreateThread中作为参数的套接字数组,c++,multithreading,winsock,C++,Multithreading,Winsock,我有一个exmaple wich,它描述了如何将1个套接字作为参数发送到新线程 SOCKET clientSocket; ... CreateThread(NULL, NULL, SexToClient, &clientSocket, NULL, &thID); ...} DWORD WINAPI SexToClient(LPVOID client) { SOCKET clientSocket; clientSocket = ((SOCKET*
SOCKET clientSocket;
...
CreateThread(NULL, NULL, SexToClient, &clientSocket, NULL, &thID);
...}
DWORD WINAPI SexToClient(LPVOID client) {
SOCKET clientSocket;
clientSocket = ((SOCKET*)client)[0];
... }
但是现在我想用套接字数组创建另一个线程。如何发送它们并在线程中使用
这一行末尾的[0]是什么意思?在这个特定的示例中,我们只发送一个套接字,它工作正常
((SOCKET*)client)[0];
您可以使用不同的数据作为第四个参数调用CreateThread任意多次,新线程将获得该数据
((SOCKET*)client)[0]
只要抓住第一个元素。它将其转换为套接字指针,然后获取第一个元素。这是另一种写作方式
*(SOCKET *)client;
通过将所有参数包装到简单结构中,可以将任何参数传递给CreateThread方法。例如:
struct ThreadParams {
std::vector<SOCKET *> sockets;
std::string clientName;
// more params
};
struct ThreadParams{
向量插座;
std::字符串clientName;
//更多参数
};
您只需在调用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;
}
ThreadParams*params=新的ThreadParams();
setParameters();
CreateThread(,SexToClient,params,);
DWORD WINAPI SexToClient(LPVOID arg){
ThreadParams*params=重新解释强制转换(arg);
//使用后删除;
删除参数;
}