How to subtract two gettimeofday instances?

僤鯓⒐⒋嵵緔 提交于 2019-12-22 10:04:48

问题


I want to subtract two gettimeofday instances, and present the answer in milliseconds.

The idea is:

  static struct timeval tv;
  gettimeofday(&tv, NULL);

  static struct timeval tv2;
  gettimeofday(&tv2, NULL);

  static struct timeval tv3=tv2-tv;

and then convert 'tv3' into milliseconds resolution.


回答1:


You can use the timersub() function provided by glibc, then convert the result to milliseconds (watch out for overflows when doing this, though!).




回答2:


Here's how to do it manually (since timersub isn't a standard function offered elsewhere)

struct timeval tv;
gettimeofday(&tv, NULL);
// ...
struct timeval tv2;
gettimeofday(&tv2, NULL);

int microseconds = (tv2.tv_sec - tv.tv_sec) * 1000000 + ((int)tv2.tv_usec - (int)tv.tv_usec);
int milliseconds = microseconds/1000;
struct timeval tv3;
tv3.tv_sec = microseconds/1000000;
tv3.tv_usec = microseconds%1000000;

(and you have to watch for overflow, which makes it even worse)

The current version of C++ offers a better option though:

#include <chrono> // new time utilities

// new type alias syntax
using Clock = std::chrono::high_resolution_clock;
// the above is the same as "typedef std::chrono::high_resolution_clock Clock;"
//   but easier to read and the syntax supports being templated
using Time_point = Clock::time_point;

Time_point tp = Clock::now();
// ...
Time_point tp2 = Clock::now();

using std::chrono::milliseconds;
using std::chrono::duration_cast;
std::cout << duration_cast<milliseconds>(tp2 - tp).count() << '\n';


来源:https://stackoverflow.com/questions/8668695/how-to-subtract-two-gettimeofday-instances

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!