vendredi 3 juin 2016

Passing CSocket to std::thread

I'm writing multithreading server using CSocket. So, as usually, I have listening server socket, and need to create receiving socket for each connected client. To provide multiple clients handling, I want to create new std::thread for each client, detach it, and next handle this client inside thread function.


I'm trying to do like this:

int client_handler(CSocket receiver)
{
  return 1;
}

CSocket server;
BOOL created = server.Create(12345);
server.Listen();
while(true)
{
  CSocket receiver;
  if (server.Accept(receiver))
  {
     std::thread handler(client_handler, receiver);
  }

}
...

I got a compiler error at std::thread instantiation :

error C2664: 'std::tuple<int (__cdecl *)(CSocket),CSocket>::tuple(std::tuple<int (__cdecl *)(CSocket),CSocket> &&)': cannot convert argument 1 from 'int (__cdecl &)(CSocket)' to 'std::allocator_arg_t'

I've read std::thread docs, but still can't understand - why СSocket cannot be passed to?

Aucun commentaire:

Enregistrer un commentaire