我想知道 C和C++ 中是否有与 PHP 函数 microtime() 等效的函数。我环顾四周,但找不到明确的答案。
谢谢!
没有与 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);
(Darcara 的回答,来自:https ://stackoverflow.com/a/4568649/330067 )
在 Linux 上,您可以使用gettimeofday,它应该提供相同的信息。事实上,我相信这是 PHP 在幕后使用的功能。
C++11 添加了一些标准的计时函数(参见第 20.11 节“时间实用程序”),准确度很高,但大多数编译器还不支持这些。
大多数情况下,您需要使用您的操作系统 API,例如gettimeofday
POSIX。
对于代码的计时部分,请尝试std::clock,它返回滴答声,然后除以CLOCKS_PER_SEC
。
在 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
,但那时你可能会遇到最大数量限制double
,并且函数名称会产生误导(这样的函数应该有名称nanotime()
not microtime()
,并且返回值可能应该大于两倍),顺便说一句,我在这里收集了 php-functions-ported-to-c++:https:/ /github.com/divinity76/phpcpp(其中包括 microtime())
libUTP(uTorrent 传输协议库)有一个在不同平台上获取 microtime的好例子。