识别 boost::shared_ptr<boost::thread> 中的对象
Identify objects in boost::shared_ptr<boost::thread>
我正在根据boost网站上的一个例子构建一个应用程序。这些是需要了解的相关定义:
类型定义 提升::shared_ptr<连接> connection_ptr;标准::设置connections_;std::vector<boost::shared_ptr><boost::thread>> threads; 连接>
其中连接是一个类。
connection_manager.cpp,在其中一个文件中,他们是这样做的:
无效 connection_manager::开始(connection_ptr c){ connections_.插入(c); c->start();}
现在,由于我的程序结构,我想在单独的线程中启动每个新连接。所以我根据以下内容修改了上述内容:
无效 connection_manager::开始(connection_ptr c){ 提升::shared_ptr<提升::线程> 线程(新提升::线程( boost::bind(&connection::start, c))); 将新创建的线程推入向量 threads.push_back(螺纹); 将连接保存在我们的集合中 connections_.插入(c);}
我的问题,因此这个问题,是当我只想connection_对象中的一个时。在前面提供的链接中,它们如下所示:
无效 connection_manager::停止(connection_ptr c){ connections_.擦除(c); c->stop(); 在线程中找到连接并加入该线程}
但正如上面的评论所建议的那样,我如何在所有线程中找到 c 并仅停止该线程。我想为该线程调用 join() 函数。
更新:
我认为这实际上是我真正想要的!所以我将我的变量声明为
标准::映射 <connection_ptr,><提升::线程>> 线程;
但是,我如何像以前一样创建新的胎面?喜欢:
提升::shared_ptr <提升::线程> 线程(新提升::线程( boost::bind(&connection::start, c)));
但下一步是什么?很抱歉感到困惑... :-)
如果使用映射(或其他关联容器)而不是向量,则可以在连接和线程之间保持关联:
std::map<connection_ptr, boost::shared_ptr<boost::thread> > threads;
允许您编写:
threads[connection] = thread;
而不是创建线程后push_back调用,然后:
threads[connection]->stop();
稍后当您要查找它时。
注意:作为一般评论,在线程和网络连接之间保持 1:1 映射的应用程序非常容易受到拒绝服务 (DoS) 攻击。
如果您的连接始终绑定到线程,则只需让连接对象指向它正在运行的线程并将线程中启动的逻辑移动到连接类本身是有意义的。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- EASTL矢量<向量<int>>连续的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 使用 std::vector<boost::shared_ptr<Base_Class>> 或 boost::p tr_vector 的性能注意事项是什么<Base>