Ich schreibe Multithreading-Server mit CSocket
. Wie üblich habe ich den Server-Socket und muss für jeden verbundenen Client einen Empfangs-Socket erstellen. Um mehrere Clients zu behandeln, möchte ich für jeden Client std::thread
neu erstellen, detach
es, und als nächstes diesen Client innerhalb Thread-Funktion behandeln.Übergabe von CSocket zu Std :: Thread
Ich versuche, wie dies zu tun:
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);
}
}
...
ich std::thread
Instanziierung einen Compiler-Fehler bekam:
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'
ich std::thread
docs gelesen habe, aber noch können‘ t verstehen - warum kann СSocket nicht weitergegeben werden?
MSDN ist überraschend leise auf Kopie-Konstruierbarkeit von 'CSocket'. Kann es sein, dass es einfach nicht kopierbar ist? – SergeyA
@SergeyA 'CSocket' wird von' CObject' abgeleitet, das tatsächlich nicht kopierbar ist. Es ist wahrscheinlich am besten "Detach" zu machen, rohe 'SOCKET' an den Thread zu übergeben und' Attach' dort anzubringen. –
@IgorTandetnik, und ich nehme an, es ist auch nicht beweglich? – SergeyA