我有一个线程对象的向量,每次客户端连接到我的服务器时,一个新的线程对象被添加到向量中,并且该线程运行我的clientHandler函数。
std::vector<std::thread> clientThreads; //vector of client threads
.../*setting up server.*/
std::mutex clientThreadsM;
while(1) {
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
std::unique_lock<std::mutex> CTlock(clientThreadsM);
if(clientThreads.size() <= MAX_THREADS){
clientThreads.push_back(std::thread(clientHandler, newsockfd, std::ref(userandPass), std::ref(UserAccounts)));
}
CTlock.unlock();
}
但是,我需要进行两项重要的调整。
而不是if循环,我需要这样做,以便程序等待条件:clientThreads.size()&lt; = MAX_THREADS 为了使每个客户端最终连接到服务器。在C ++中是否有(高效)设施?
我想这样做,当线程结束时,它们会从向量中删除,以便为另一个客户端腾出空间。当然,必须以某种方式将其作为clientHandler函数的一部分来完成,因为我不能让while循环等待线程完成。有没有办法以某种方式让线程自我删除&#39;从矢量完成?