擦除它创建的函数中的线程
Erasing a thread inside the function it makes
我正在处理一个具有如下线程向量的服务器:
vector<thread> thred;
每次客户端连接到服务器时,它都会在服务器中创建一个新线程,如下所示:
thred.push_back(thread(NewClient, ClientSocket, recvbuf, recvbuflen));
thred[thred.size()-1].detach();
其中 NewClient 是一个带有参数 ClientSocket、recvbuf 和 recvbuflen 的函数。所以我的问题是,我是否可以在 NewClient 中使用任何方法或函数来关闭线程并擦除功能本身正在使用的向量元素。
任何帮助将不胜感激。
也许创建另一个向量
vector<int> thread_exit_time;
并将其设置为线程函数NewClient
退出的系统时间。无需调用thred.push_back
您可以检查thread_exit_time
并替换这些死线程。
由于您调用detach
因此没有其他方法可以检查线程是否处于活动状态。
最好创建一个pair
向量
vector<std::pair<thread,int>> thread;
以确保两个向量同步。
无论如何,您应该首先考虑为什么需要保留@SergeyA提到的分离线程列表。
也许使用 map<int,thread>
而不是 vector
来存储线程,并将线程的映射键作为附加参数传递给线程方法。 线程执行完毕后,它可以将自身从主表中删除。
映射键可以是简单的东西,例如不断递增的整数值。
不要忘记用互斥锁或类似的东西包裹桌子,正如斯蒂芬所说。
相关文章:
- C++使用params创建线程函数会导致转换错误
- 如何在大函数中编写多线程函数?
- C++11:将矢量元素作为线程传递到线程函数中
- 线程函数中的c++参数更改
- 我需要线程函数在不停止实际程序的情况下,每2秒打印一次随机数
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 将项目插入 CTreeCtrl 时线程函数的奇怪行为
- C++ 线程函数通过引用传递
- 线程函数参数的前向声明不起作用
- 线程函数无法从堆上分配的缓冲区中读取字符
- 线程函数不打印
- C :如何在复杂模板类中指定线程函数
- 为什么我在C++线程函数调用中得到重复值?
- C++ 线程函数指针实现返回错误无效使用非静态成员函数
- 线程函数中的通用引用
- 如何同时启动两个具有不同线程函数的线程团队
- std::c++ 中的线程在设置线程函数时不会出错
- 对抽象类的引用不能传递给线程函数?
- 如何将ifstream作为参数传递给std ::线程函数
- 如何线程函数