我想知道C 和 C ++中的PHP函数microtime()是否等效。我环顾四周但找不到明确的答案。
谢谢!
答案 0 :(得分:8)
没有完全等同于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)
答案 1 :(得分:6)
在Linux上,您可以使用gettimeofday,它应该提供相同的信息。事实上,我认为这是PHP使用的功能。
答案 2 :(得分:4)
C ++ 11添加了一些标准的计时功能(参见第20.11节“时间实用程序”),准确性很高,但大多数编译器还不支持这些功能。
大多数情况下,您需要使用OS API,例如gettimeofday
用于POSIX。
答案 3 :(得分:2)
对于代码的时序部分,请尝试std::clock,它返回刻度,然后除以CLOCKS_PER_SEC
。
答案 4 :(得分:1)
libUTP(uTorrent传输协议库)在不同平台上获取microtime有很好的example。
答案 5 :(得分:0)
在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));
}
std::chrono::nanoseconds
而不是std::chrono::microseconds
获得更高的精度,但是到那时,您可能会遇到double
的最大数量限制,并且该函数名称会产生误导作用(此类函数的名称应为nanotime()
而不是microtime()
,返回值应为可能比两倍还大),顺便说一句,我这里有一个php-functions-ported-to-c ++的集合:https://github.com/divinity76/phpcpp(其中有microtime()在内)