我在想是否有一个与PHP函数microtime()等效的C和C++函数。我搜索了一下,但没有找到明确的答案。
谢谢!
虽然没有与PHP的microtime()完全等价的函数,但是您可以根据以下代码创建一个具有类似功能的函数:
#include <sys/time.h>
struct timeval time;
gettimeofday(&time, NULL); #This actually returns a struct that has microsecond precision.
long microsec = ((unsigned long long)time.tv_sec * 1000000) + time.tv_usec;
(基于:http://brian.pontarelli.com/2009/01/05/getting-the-current-system-time-in-milliseconds-with-c/)
unsigned __int64 freq;
QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
double timerFrequency = (1.0/freq);
unsigned __int64 startTime;
QueryPerformanceCounter((LARGE_INTEGER *)&startTime);
//do something...
unsigned __int64 endTime;
QueryPerformanceCounter((LARGE_INTEGER *)&endTime);
double timeDifferenceInMilliseconds = ((endTime-startTime) * timerFrequency);
我认为在C++11中,相当于PHP的microtime(true)
的是:
#include <chrono>
double microtime(){
return (double(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count()) / double(1000000));
}
有趣的是,微秒是一秒的百万分之一,但 C++ 也支持纳秒,即一秒的十亿分之一,我想你如果使用 std::chrono::nanoseconds
而不是 std::chrono::microseconds
,你会获得更高的精度,但此时你可能会遇到双精度浮点数的最大数字限制,并且函数名称会误导你(这样的函数应该命名为nanotime()
而不是 microtime()
,返回值应该比 double 更大),顺便说一下,我在这里收集了一些 PHP 函数移植到 C++ 中的代码:https://github.com/divinity76/phpcpp(其中包括 microtime() 函数)。
C++11添加了一些标准时间记录函数(见第20.11节“时间工具”),精度较高,但大多数编译器尚未支持。
主要需要使用操作系统API,例如POSIX的gettimeofday
。
如果需要计时代码段,可以尝试使用std::clock函数,它会返回时钟周期数,然后再除以CLOCKS_PER_SEC
。
struct timeval time;
。 - worengatime.tv_sec
强制转换为unsigned long long
,这将成为乘法和加法的结果类型,并且被分配到左侧的long
中(也进行了强制类型转换)。这里的想法是什么? - Michael Härtl