如何在构造函数中记录时间,以及如何从C++结构的析构函数中的构造中减去当前时间



我目前正在C++中进行一个练习,创建一个名为TimerClass的结构,其构造函数记录当前时间,以及一个记录当前时间并从构造时间(即构造函数中的当前时间(中减去该时间并将其打印到控制台的析构函数。这是我迄今为止的代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <chrono>
#include <ctime>
struct TimerClass {
TimerClass(time_t* timestamp) : timestamp(timestamp) {
std::chrono::system_clock::now();
printf("The current time is: %sn", timestamp);
}
~TimerClass() {
printf("Time since last construction: %sn", timestamp);
}
private:
time_t* timestamp;
};

我试着在网上查找一些可能的解决方案,但运气不佳。我是C++的新手,我正在学习的书中没有说明如何记录时间。

std::chrono库对于您的场景来说是一个不错的选择。steady_clock不受系统时间的影响,更适合这种工作,因此在演示中使用了它。

另一个提示是,除非你没有其他选择,否则不要再使用指针了。前缀为"c"的头表示来自c语言的库,因此最好避免使用它们。

这是演示,也许是您了解chrono库的起点。

#include <iostream>
#include <chrono>
#include <thread>
struct TimerClass {
TimerClass() 
:   m_start { std::chrono::steady_clock::now() }
{}
~TimerClass() {
using namespace std::chrono;
auto life = steady_clock::now() - m_start;
std::cout << "Duration in ms " << duration_cast<milliseconds>( life ).count() << std::endl;
std::cout << "Duration in us " << duration_cast<microseconds>( life ).count() << std::endl;
}
private:
std::chrono::steady_clock::time_point m_start;
};
int main()
{
TimerClass t;
{
TimerClass t_2;
std::this_thread::sleep_for( std::chrono::seconds { 1 } );
}
std::this_thread::sleep_for( std::chrono::milliseconds { 300 } );
}

https://godbolt.org/z/VFgWDT

最新更新