Как записать время в конструкторе и как вычесть текущее время из конструкции в деструкторе в C ++ Struct? - PullRequest
1 голос
/ 17 марта 2020

В настоящее время я работаю над упражнением в 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;
};

Я попытался найти некоторые возможные решения онлайн без особой удачи. Я новичок в C ++, и в книге, из которой я учусь, не говорится, как записывать время.

1 Ответ

5 голосов
/ 17 марта 2020
Библиотека

std :: chrono - хороший вариант для вашего сценария. steady_clock лучше подходит для такой работы, потому что на нее не влияет системное время, поэтому она используется в демонстрации.

Еще один совет: больше не используйте указатель, если у вас нет другой вариант. Заголовок с префиксом 'c' означает библиотеку на языке C, поэтому их лучше избегать.

Вот демонстрация, возможно, отправная точка для понимания библиотеки хронографа.

#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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...