我正在使用std::chrono
工具来获取从ADC获取的数据的精确时序。
我的程序读取内存中的数据,并从high_resolution_clock::now()
获取完成此操作的时间。
然后等待一段时间使用std_thread::sleep_for()
并再次开始,直到达到所需的采集样本数量。
该程序使用arm-linux-gnueabi-g++ version 4.7.3
现在我的问题:我获得一个频率为1Hz的方波,这样我就知道了预期的时间。但是当我使用std::chrono::microseconds
转换持续时间时,我会以毫秒为单位获得时间。当我使用std::chrono::milliseconds
投射时,我获得了秒!因此有一个因子1000的转变。
但请注意,函数std_thread :: sleep_for()工作正常:我在这里也使用std::chrono::milliseconds
并要求它睡眠100毫秒,我获得了每秒预期的10次采集。
有人对此发表评论吗?似乎c ++ 11是实验性的,所以你认为那里可能有一个错误吗?
感谢。
代码的相关部分是:
// Acquire example
typedef std::chrono::high_resolution_clock::time_point time_pt_t;
typedef std::chrono::milliseconds duration_t;
typedef std::vector< duration_t > vector_time;
Acquire(unsigned int nsamp, int samptime)
{
vector_time(nsamp);
std::chrono::milliseconds sampling_time(samptime);
time_pt_t start = std::chrono::high_resolution_clock::now();
for(unsigned int i=0;i<nsamp;i++){
time_pt_t time_tmp = std::chrono::high_resolution_clock::now();
// do acquisition
time[i] = std::chrono::duration_cast<duration_t>(time_tmp - start);
std::this_thread::sleep_for(sampling_time);
}
}