我想寫一個簡單的C++聊天服務器。簡化:具有多線程的C++服務器
void clientThread(int sock){
// receives data on socket and sends to all other client's
//sockets which are held in a vector, when received data<0 thread is
// finished and client is removed from a vector
}
主迴路:
vector<thread> th;
while(1){
memset(&rcvAddr,0,sizeof(sockaddr_in));
sock=accept(connectSocket,NULL,(socklen_t*)&addrLength);
cout << "client connected from: " << inet_ntoa(rcvAddr.sin_addr)<< endl;
if(sock<0)
continue;
mtx.lock();
clientDescriptors.push_back(sock);
mtx.unlock();
th.pushback(thread(&server::clientThread,this,sock));
}
而且我有最後一行的問題。這個矢量不斷增長,你知道任何正確的方式來管理?如何產生這些線程?是否有任何實施的數據結構或類似的東西來管理線程?我讀了關於線程池,但我認爲這並不能解決這個問題。
你不斷反覆推動相同的函數。 –