C++具有过期时间的容器
C++ container with expiration time
我想创建一个C++(11)容器(可以使用boost)来容纳数据库连接。我希望能够在容器中推送连接指针,但是 std::vector 不知道插入时间,所以我可以使用这样的东西。
-
当连接开始执行时,它还将推入带有时间现在()的容器。
如果连接完成数据库中的作业,则连接将是已从容器中删除。
理想情况下,我的类将有一个清理方法,该方法将定期检查连接在容器中是否超过特定时间间隔,即 30 秒。如果为 true,则连接将从数据库中释放。
任何想法,有什么标准解决方案吗?
您可以使用对向量。其中,每对的第一个元素是插入时间,第二个元素是连接指针。
std::vector<std::pair<int, ConnectionPtr*>> connections_vec;
此外,您可以使用 STL std::partition
来摆脱过期的连接,如下所示:
connections_vec.erase(std::partition(connections_vec.begin(),
connections.vec.end(),
[](auto &&p){return (time_now - p.first) > 30secs;}),
connections_vec.end());
有多种可能的解决方案可以满足您的需求。
您仍然可以使用 std::vector<>但包含您定义的结构,该结构包含数据库连接实例和时间,即(大致记下的代码):
struct TimedConnection {
DBConnection& connection;
time_t connected_time;
};
std::vector<TimedConnection> myConnections;
或者,或者,使用 std::pair<DBConnection, time_t>
作为矢量项。
请注意,自定义结构选项将允许您为未来的发展或改进提供更大的自由度,因为它不限于 2 个数据作为std::pair<>
。
如果此类容器的唯一用途是定期检查是否有超过 X 秒前启动的数据库连接,您还可以查看 std::p riority_queue<>,可能在项目结构(或对)上使用自定义比较运算符。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- C++具有过期时间的容器
- C++设计一个具有过期/持续时间的容器
- acquirecredentialhandle返回大量过期时间