Microtime()等效于C和C ++?

时间:2012-07-22 22:02:12

标签: c++ c microtime

我想知道C C ++中的PHP函数microtime()是否等效。我环顾四周但找不到明确的答案。

谢谢!

6 个答案:

答案 0 :(得分:8)

没有完全等同于PHP的microtime(),但您可以根据以下代码使用具有类似功能的函数:

Mac OS X,可能还有Linux / Unix

#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));
}
  • 但是我不确定C等效项是什么,或者甚至不存在C等效项(正如其他人指出的那样,gettimeofday是posix的一部分,但不是c / c ++规范的一部分)
有趣的是,微秒是百万分之一秒,但是c ++也支持纳秒,即十亿分之一秒,我想您将使用std::chrono::nanoseconds而不是std::chrono::microseconds获得更高的精度,但是到那时,您可能会遇到double的最大数量限制,并且该函数名称会产生误导作用(此类函数的名称应为nanotime()而不是microtime(),返回值应为可能比两倍还大),顺便说一句,我这里有一个php-functions-ported-to-c ++的集合:https://github.com/divinity76/phpcpp(其中有microtime()在内)