Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算每秒时钟数_C++_C++11 - Fatal编程技术网

C++ 计算每秒时钟数

C++ 计算每秒时钟数,c++,c++11,C++,C++11,我做得对吗?有时,我的程序会为chrono解决方案打印2000+个时钟,并始终为时钟每秒打印1000个时钟 我实际计算的值是多少?是每秒钟吗 #include <iostream> #include <chrono> #include <thread> #include <ctime> std::chrono::time_point<std::chrono::high_resolution_clock> SystemTime() {

我做得对吗?有时,我的程序会为chrono解决方案打印2000+个时钟,并始终为时钟每秒打印1000个时钟

我实际计算的值是多少?是每秒钟吗

#include <iostream>
#include <chrono>
#include <thread>
#include <ctime>

std::chrono::time_point<std::chrono::high_resolution_clock> SystemTime()
{
    return std::chrono::high_resolution_clock::now();
}

std::uint32_t TimeDuration(std::chrono::time_point<std::chrono::high_resolution_clock> Time)
{
    return std::chrono::duration_cast<std::chrono::nanoseconds>(SystemTime() - Time).count();
}

int main()
{
    auto Begin = std::chrono::high_resolution_clock::now();
    std::this_thread::sleep_for(std::chrono::milliseconds(1));
    std::cout<< (TimeDuration(Begin) / 1000.0)<<std::endl;

    std::cout<<CLOCKS_PER_SEC;
    return 0;
}
#包括
#包括
#包括
#包括
std::chrono::time_point SystemTime()
{
返回std::chrono::高分辨率时钟::now();
}
std::uint32\u t时长(std::chrono::time\u点时间)
{
返回std::chrono::duration_cast(SystemTime()-Time).count();
}
int main()
{
自动开始=标准::时钟::高分辨率时钟::现在();
std::this_线程::sleep_for(std::chrono::毫秒(1));

std::cout为了在Linux上获得正确的每秒节拍,您需要使用返回值
::sysconf(_SC\u CLK\u TCK)
(在头
unistd.h
中声明),而不是宏
每秒时钟数

后者是POSIX标准中定义的常数–它与CPU时钟每秒的实际滴答数无关。例如,请参阅手册页了解
时钟

C89,C99,POSIX.1-2001。POSIX要求时钟每秒等于1000000,与实际分辨率无关


但是,请注意,即使使用正确的“滴答声/秒”常量,您仍然无法获得每秒的实际CPU周期数。“时钟滴答声”是CPU时钟使用的一个特殊单位。它与实际CPU周期的关系没有标准化定义。

在boost的库中,有一个计时器类,使用时钟每秒来计算计时器可以经过的最大时间。它说在Windows时钟每秒是1000,在Mac OS X上,Linux是1000000。因此在后者的操作系统上精确度更高。

Huh?你说的每秒时钟是什么意思?为什么每秒时钟宏=1000?我如何计算我的CPU每秒的周期数?我正在尝试编写一个程序,在不使用ASM的情况下,它每滴答地做一些事情,并希望尽可能高的精确度。我可能建议你使用一个硬件解决方案,你可以d如果你想获得更高的精度,请看你项目的软件部分。干杯+1。我还认为可能值得一提的是,许多现代CPU也有非常复杂的PLL电路,可以动态改变频率并切断CPU的某些子部分。我接受了这个答案。不过……我想知道如何计算时钟s_peru__secs..我不喜欢在windows上默认定义为1000的事实。@CantChooseServerNames我远不是windows方面的专家,但在windows上,
CLOCKS_peru_secs
似乎是你能得到的最好的。Boost也使用它。其思想是操作系统确保
clock()
返回的数字乘以
每秒时钟数
,等于经过的秒数。
每秒时钟数
始终为1000这一事实并不一定与此矛盾。还要注意的是,
clock()
应该返回CPU时间(即,相当于您的进程使用CPU的数量),在Windows上,这被称为中断,显然返回的是实时,而不是CPU时间。至少这是人们在这篇SO帖子中所说的:(请参阅评论了解答案)