擦除它所做的函数内的一个线程

时间:2016-04-25 16:42:28

标签: c++ multithreading function vector

我正在使用具有这样的线程向量的服务器:

vector<thread> thred;

每次客户端连接到服务器时,它都会在服务器中创建一个新线程,如下所示:

thred.push_back(thread(NewClient, ClientSocket, recvbuf, recvbuflen));
thred[thred.size()-1].detach();

其中NewClient是一个带有ClientSocket,recvbuf和recvbuflen参数的函数。所以我的问题是,如果有任何方法或函数我可以在NewClient中使用来关闭线程并擦除函数本身正在使用的向量元素。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

可能使用map<int,thread>而不是vector来存储您的线程,并将线程的map键作为附加参数传递给线程方法。当线程完成执行时,它可以从主表中删除它。

map键可以是一个简单的东西,就像一个不断递增的整数值。

不要像斯蒂芬所说的那样忘记用互斥或类似的东西包裹桌子。

答案 1 :(得分:0)

也许创建另一个向量

vector<int> thread_exit_time;

并将其设置为线程函数NewClient退出时的系统时间。您可以检查thred.push_back并替换那些死线程,而不是调用thread_exit_time

由于你调用detach,没有其他方法可以检查线程是否存在。

创建pair

的向量可能更好
vector<std::pair<thread,int>> thread;

确保两个向量同步。

无论如何,您应首先考虑为什么需要保留分离的线程列表,如@SergeyA所述。