- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的理解是
std::chrono::high_resolution_clock::period::num / std::chrono::high_resolution_clock::period::den;
给出滴答频率,但如何确定时钟的分辨率? (在windows下这个比例返回我1e-007
)
例如,在 Windows 下,high_resolution_clock
是 system_clock
的 typedef
,它每 ~15ms 滴答一次,精度为 100µs,而 boost::chrono high_resolution_clock
是 steady_clock
的 typedef
,我如何确定它的分辨率?
最佳答案
解决此类问题的最佳方法是进行测试。此信息无法通过 <chrono>
获得API,通常不记录。
测试可能会从预先分配的数组中的时钟收集大量时间戳,然后对这些集合进行某种统计分析。例如,下面是一个测试,用于查找连续调用 Clock::now()
之间报告的平均、最小和最大持续时间。 .
#include "date/date.h"
#include <iostream>
#include <vector>
template <class Clock>
void
test()
{
auto warm_up = Clock::now();
(void)warm_up;
std::vector<typename Clock::time_point> v(100'000);
for (auto& t : v)
t = Clock::now();
auto m = Clock::duration::max();
auto M = Clock::duration::zero();
for (auto i = 1; i < v.size(); ++i)
{
auto delta = v[i] - v[i-1];
if (m > delta)
m = delta;
if (M < delta)
M = delta;
}
using date::operator<<;
std::cout << "Average delta between calls is "
<< (v.back() - v.front())/(double)(v.size()-1) << '\n';
std::cout << "Minimum delta between calls is " << m << '\n';
std::cout << "Maximum delta between calls is " << M << '\n';
}
int
main()
{
test<std::chrono::system_clock>();
}
"date/date.h"使用 header 只是为了更容易打印出持续时间,而无需手动发现它们的单位。您可以将此测试修改为不使用 "date/date.h"通过自己格式化持续时间。
我编译这个:
clang++ -std=c++17 test.cpp -I../date/include -O3 -Wall
在 macOS 上,运行 3 次并得到:
Average delta between calls is 0.049440µs
Minimum delta between calls is 0µs
Maximum delta between calls is 40µs
Average delta between calls is 0.048790µs
Minimum delta between calls is 0µs
Maximum delta between calls is 45µs
Average delta between calls is 0.047210µs
Minimum delta between calls is 0µs
Maximum delta between calls is 38µs
那是为了 system_clock
.改为 steady_clock
我得到了:
Average delta between calls is 56.912339ns
Minimum delta between calls is 43ns
Maximum delta between calls is 26973ns
Average delta between calls is 63.223292ns
Minimum delta between calls is 45ns
Maximum delta between calls is 79589ns
Average delta between calls is 55.261153ns
Minimum delta between calls is 44ns
Maximum delta between calls is 21786ns
我没有费心为 high_resolution_clock
运行测试因为这个时钟是 steady_clock
的类型别名在这个平台上。
关于c++ - 分辨率与滴答频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775520/
我有一个包含 34 个变量和大约 25,000 个观测值的数据集。每个观察都涉及一个特定事件。它的格式如下: no id date .... 1 363 006
我已将 R 连接到 Twitter 并使用 R 中的 searchTwitter 函数进行抓取,并清除标点符号、小写字母等结果数据。现在我正在尝试执行以下操作: 计算自 2015 年 1 月 至 20
我正在研究项目,需要可视化频谱分析以设置一些精确参数。现在,我将垃圾箱转换为屏幕空间,因为在线性空间中,较低频率的幅度被压缩在一起。这是我在C++中的代码: float windowSize = 64
我正在尝试使用MATLAB导入WAV文件并创建如下所示的图表类型。我基本上是在尝试获取频率信息并根据分贝对其进行绘制。这是我正在使用的代码,但似乎无法正确提取频率信息: [x fs]=wavread(
我有一个 GUI,可以计算字符串中第一个字母的出现次数。我希望它以列格式计算所有字母,例如: 这是我到目前为止所拥有的: import java.awt.BorderLayout; import ja
我有一个由许多变量组成的全国调查,就像这个(为了简单起见,我省略了一些变量): year id y.b sex income married pens weight 2002
我被要求报告我们客户的联系频率,即每周、每月、每季度或每年看到多少客户。 当在论坛中讨论“频率”时,它们通常是指某个值在表中存在的次数。 我可以获得客户的联系人数量:- select A.cl
我正在尝试制作一款游戏,当麦克风发出足够响亮的声音时,我的角色会射击(在 Unity 中)。但是我不知道如何开始。 感谢您的帮助! 最佳答案 您可以通过使用 AudioSource.GetOutput
尝试计算字符数并改进我的代码,我做了一些更改,而不是使用 while 循环。好奇是否有人对我如何改进我的代码以使其更专业且更便宜有任何建议? #include int countingCharact
我正在创建一个 MySQL 数据库,其中包含大量带有时间戳的条目。这些条目将附加到特定用户和另一个索引(例如博客作者和他的几个网站)。计算用户/全局每日条目图表的最佳方法是什么。 我的两种方法是使用
我创建了一项调查并将其发送出去。该调查要求用户提供电子邮件,然后要求他们从包含 8 个不同选项的下拉菜单中选择要吃哪顿饭。有些人使用同一封电子邮件多次填写调查,但食物选择不同。 我有一个如下所示的 M
我有一个 MySQL 数据库: Date Customer_ID 我怎样才能把它变成: Customer_ID | Count_Visits_Past_Week | Count_Visits_
对于非常大的数据集,如何使用 gnuplot 仅在第一个和最后一个数据点的 x 轴上放置标记/标签? 最佳答案 在 gnuplot 4.6 及更高版本中,您可以使用命令 stats 'data.dat
我正在寻找一种方法来为具有共同词根/含义的单个词生成数值概率值。 用户将使用“舞者”、“跳舞”、“跳舞”等词生成内容。 如果“dancer”被提交了 30 次,跳舞了 5 次,我只需要一个值“danc
给定一个包含如下内容的数据集: [2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 65, 75, 85, 86, 87,
我想将声音的音高绘制成图表。 目前我可以绘制幅度。下图是由 getUnscaledAmplitude() 返回的数据创建的: AudioInputStream audioInputStream = A
在 Javascript 中,我试图获取一个初始的数值数组并计算其中的元素。理想情况下,结果将是两个新数组,第一个指定每个唯一元素,第二个包含每个元素出现的次数。不过,我愿意接受有关输出格式的建议。
我正在编写一个多线程OpenMPI应用程序,使用来自多个线程的MPI_Isend和MPI_Irecv在InfiniBand RDMA的各个列之间每秒交换数百条消息。 传输量约为400-800KByte
这个站点上有很多问题,询问如何在给定频率下创建简单的正弦波。我想做的是获取阵列或列表或任何频率,然后连续连续播放它们(而不是和弦),听起来有点像旧PC扬声器。我尝试使用Console.Beep,但是它
我使用我的App捕获声音。假设此声音是正弦1 KHz声音,并且存在背景声音。如何识别此1 KHz声音出现在声音上? 我的意思是,我可以想象如何在图像中找到元素,例如,如果您要在图像上寻找黄色正方形,那
我是一名优秀的程序员,十分优秀!