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

wts*_*ars 1 c++ unix

我目前正在 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: %s\n", timestamp);
    }

    ~TimerClass() {
        printf("Time since last construction: %s\n", timestamp);
    }

private:
    time_t* timestamp;
};
Run Code Online (Sandbox Code Playgroud)

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

arn*_*nes 5

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 } );
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/VFgWDT