Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在CreateThread中作为参数的套接字数组_C++_Multithreading_Winsock - Fatal编程技术网

C++ 在CreateThread中作为参数的套接字数组

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*

我有一个exmaple wich,它描述了如何将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];

您可以使用不同的数据作为第四个参数调用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);
//使用后删除;
删除参数;
}