【发布时间】:2016-08-17 05:38:34
【问题描述】:
我在使用线程向量时遇到了问题。我想为服务器中的每个客户端创建一个线程。所以我有一个名为 NewClient 的函数,一旦连接开始,就会为客户端做所有必要的事情。这个函数是这样定义的:
int __cdecl NewClient(SOCKET ListenSocket, SOCKET ClientSocket, char *recvbuf, int recvbuflen, int iSendResult, int iResult){
//read command from client
//execute command
//answer the server
}
还有这样的线程向量:
vector<thread> thred;
所以当我使用 pushback 在 main 中创建线程时,问题就来了:
int __cdecl main(void) {
//things
SOCKET ListenSocket=INVALID_SOCKET;
SOCKET ClientSocket=INVALID_SOCKET;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
int iSendResult=0;
int iResult;
thred.push_back(thread(NewClient,ListenSocket, ClientSocket, recvbuf, recvbuflen, iSendResult, iResult));
thred[thred.size()-1].detach();
}
使用时(据我所知是这样使用的):
thred.push_back(thread(NewClient,ListenSocket, ClientSocket, recvbuf, recvbuflen, iSendResult, iResult));
我得到两个错误,下划线:
错误 2 错误 C2661: 'std::thread::thread' : ninguna 函数 sobrecargada acepta 7 argumentos D:\Descargas\Baaer 1.0.22\Baaer 1.0.22\Server\Server\Source_s.cpp 170 1个服务器
3 IntelliSense:ninguna instancia del 构造函数 “std::thread::thread”与 con la lista de argumentos 不谋而合 los tipos de argumento son: (int __cdecl (SOCKET ListenSocket, SOCKET ClientSocket, char *recvbuf, int recvbuflen, int iSendResult, int iResult), SOCKET, SOCKET, char [512], int, int, int) d:\Descargas\Baaer 1.0.22\Baaer 1.0.22\Server\Server\Source_s.cpp 170 19 服务器
那我该如何解决呢?
【问题讨论】:
标签: multithreading function vector arguments push-back