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

问题描述 投票:8回答:6

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

谢谢!

c++ c microtime
6个回答
6
投票

在Linux上,您可以使用gettimeofday,它应该提供相同的信息。事实上,我相信这是PHP使用的功能。


9
投票

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

Mac OS X and probably also 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/


Windows:

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


4
投票

C ++ 11添加了一些标准的计时功能(参见第20.11节“时间实用程序”)并且具有良好的准确性,但大多数编译器还不支持这些功能。

大多数情况下,您需要使用OS API,例如用于POSIX的gettimeofday


2
投票

对于代码的计时部分,请尝试std::clock,它返回刻度,然后除以CLOCKS_PER_SEC


1
投票

libUTP(uTorrent传输协议库)在不同平台上获取microtime有一个很好的example


1
投票

在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等价物是什么,或者是否有一个(正如其他人所指出的那样,gettimeofday是posix的一部分,但不是c / c ++规范的一部分)

有趣的是,微秒是百万分之一秒,但c ++也支持纳秒,这是一个十亿秒,我猜你用std::chrono::nanoseconds而不是std::chrono::microseconds得到更高的精度,但在那时你可能遇到最大数量double的限制,并且函数名称会产生误导(这样的函数应该具有nanotime()而不是microtime()的名称,并且返回应该是大于double的东西),顺便说一下我有一个php-functions-ported-to-c ++的集合这里:https://github.com/divinity76/phpcpp(和microtime()就是其中之一)

© www.soinside.com 2019 - 2024. All rights reserved.