Reputation: 2595
How can I get (using the std::chrono
library) the difference between two points in time in milliseconds?
I could do that using this:
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> foo = now + std::chrono::milliseconds(100);
std::chrono::duration<float> difference = foo - now;
const int milliseconds = difference.count() * 1000;
How can I get this time in milliseconds, so I can use the duration as an unsigned int
, and not a float
and then multiply by 1000?
Upvotes: 57
Views: 91720
Reputation: 732
I had issues with the duration printing out with letters like e-09. Here's how I fixed it:
auto start = std::chrono::high_resolution_clock::now();
< run your function or code here >
auto finish = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = finish - start;
std::cout << "Elapsed Time: " << elapsed.count() << " seconds" << std::endl;
And now I get desired results:
Elapsed Time: 34.406 seconds
Upvotes: 5
Reputation: 15522
std::chrono::duration
has two template parameters, the second being exactly the unit of measure. You can invoke std::chrono::duration_cast
to cast from one duration type to another. Also, there is a predefined duration type for milliseconds: std::chrono::milliseconds
. Composing this together:
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(foo - now);
To get the actual number of milliseconds, use duration::count
:
auto ms = milliseconds.count();
Its return type is duration::rep
, which for standard duration types like std::chrono::milliseconds
is a signed integer of unspecified size.
Upvotes: 74
Reputation: 1723
chrono::duration_cast<chrono::milliseconds>(end_time - start_time).count()
Upvotes: 13
Reputation: 394
http://www.cplusplus.com/reference/chrono/duration_cast/
std::chrono::duration_cast<std::chrono::milliseconds>();
Upvotes: 2