保持std::chrono time_point实例,然后将它们读回相同类型的另一个实例的正确方法是什么?
typedef std::chrono::time_point<std::chrono::high_resolution_clock> time_point_t;
time_point_t tp = std::chrono::high_resolution_clock::now();
serializer.write(tp);
.
.
.
time_point_t another_tp;
serializer.read(another_tp);
对写/读的调用假设time_point_t类型的实例可以以某种方式转换为字节表示,然后可以对磁盘或套接字等进行写入或读取。
Alf建议的一个可能的解决方案如下:
std::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();
//Generate POD to write to disk
unsigned long long ns0 = t0.time_since_epoch().count();
//Read POD from disk and attempt to instantiate time_point
std::chrono::high_resolution_clock::duration d(ns0)
std::chrono::high_resolution_clock::time_point t1(d);
unsigned long long ns1 = t1.time_since_epoch().count();
if ((t0 != t1) || (ns0 != ns1))
{
std::cout << "Error time points don't match!\n";
}
<罢工> 注意:上面的代码有一个bug,因为最终实例化的时间点与原来的不匹配。
在旧样式time_t的情况下,通常只需根据其大小将整个实体写入磁盘,然后以同样的方式读回-简而言之,新的std::chrono类型的等价物是什么?
time_point
构造函数采用duration
,您可以从成员time_since_epoch
获取duration
。因此,问题简化为序列化duration
值。而duration
具有一个构造函数,它采用一定数量的刻度,以及一个成员函数count
产生刻度的数量。
这一切只需谷歌搜索std::chrono::time_point
并查看谷歌为我提供的cppreference文档。
阅读文档通常是个好主意。
增编:一个例子。
#include <chrono>
#include <iostream>
#include <typeinfo>
using namespace std;
auto main() -> int
{
using Clock = chrono::high_resolution_clock;
using Time_point = Clock::time_point;
using Duration = Clock::duration;
Time_point const t0 = Clock::now();
//Generate POD to write to disk
Duration::rep const ns0 = t0.time_since_epoch().count();
//Read POD from disk and attempt to instantiate time_point
Duration const d(ns0);
Time_point const t1(d);
cout << "Basic number type is " << typeid( ns0 ).name() << "." << endl;
if( t0 != t1 )
{
cout << "Error time points don't match!" << endl;
}
else
{
cout << "Reconstituted time is OK." << endl;
}
}
在Visual C++12.0中,报告的基本类型为__int64
,即long long
,而在Windows中的G++4.8.2中,报告的类型为x
,这可能意味着相同的含义。
补遗:正如Dina在注释中所指出的,从C++14开始,C++标准没有指定历元,因此,为了使其在机器上或在不同时钟上工作,必须添加额外的步骤,使序列化html" target="_blank">数据的历元规范化,例如,最自然的是到Posix时间,即自1970年1月1日星期四00:00:00协调世界时(UTC)以来的时间。
我知道互斥体通常也会保护共享数据,使用原子变量只是一个例子。问题不是如何保护共享数据,而是是否需要使用相同的互斥体来保护两者。另一个使用第二互斥体的示例:
让事件持续发生一段时间 用法 “保持”节点可以: 保持输入的值,直到另一个“no”没有值出现 在一段时间内保持输入的值不变 让输入逐渐的变化 Your browser does not support the video tag. 案例:小台灯 功能:按下按钮后松开手,灯亮起5s后才会灭 工作原理 你可以从配置项的3种模式中任选1个: 保持直到改变:输入将会被保持,直到有另一个输入进来(例如一张伤
HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 存储方式包括cookie、session,会话一般指session对象 使用cookie,所有数据存储在客户端,注意不要存储敏感信息 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储sessio
null 我能找到的使用JPA/Hibernate的唯一有效解决方案是执行以下步骤。这是因为hibernate将实体保留在第一级缓存中,直到事务结束。 创建新实体 强制快速刷新() 分离实体 这样做的开销是 null 使用JDBC或JdbcTemplate,但您必须为实体编写自己的插入 所以问题是:是否存在同时坚持和分离的可能性,或者甚至更好地坚持而不成为被管理的?
std::cout是std::ostream的一个实例。我可以在一个名为usr/include/c/7/iostream的文件中看到std::cout的声明: 而std::ostream由typedef std::basic\u ostream定义 此外,您似乎无法创建std::ostream的实例。请参阅此演示代码片段: 以下是编译器对上述代码段的抱怨: 问题来了,因为
问题内容: 我正在使用POST方法。我需要创建一次,并且应该使用Keep Alive Connection。但是我认为,它每次都会建立一个新的连接。 因此,我需要使用 保持活动 连接。 这是我的代码段,很多帮助将不胜感激。 而且logcat日志是: 问题答案: 10:07:29.746:D / org.apache.http.headers(1529):>>连接:保持活动 您正在要求保持活动状态。