vendredi 16 juillet 2021

What is the proper way to process milliseconds in C++11

I'm trying to update the basic dev library of my project from C++98 to C++11.

In the dev library, there are many functions about time, such as

uint64_t getCurrentMSTime()
{
    struct timeval stv;
    gettimeofday(&stv, NULL);
    uint64_t ms = stv.tv_sec ;
    ms = ms * 1000 + stv.tv_usec / 1000;
    return ms;
}

I'm trying to change it with std::chrono of C++11.

For now it seems that I have two choices, one is to return time_point, the other is to return immediately std::chrono::milliseconds::rep

std::chrono::time_point<std::chrono::system_clock> getCurrentTime1() {
    return std::chrono::system_clock::now();
}

std::chrono::milliseconds::rep getCurrentTime2() {
    return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
}

Well, I know that the first one is more flexible because it returns a time_point, which means that we can convert it into milliseconds, nanoseconds, seconds etc, whereas the second one is return only milliseconds.

But let's say that the developers use ONLY milliseconds so we can ignore the flexible issue.

In this case, which one is better?

BTW, the developers would do something like this: std::map<std::string, ???> mp;. So my code will decide the ??? part.

std::map<std::string, std::chrono::time_point<std::chrono::system_clock>> mp{std::string("abc"), getCurrentTime1()};
vs
std::map<std::string, std::milliseconds::rep> mp{std::string("abc"), getCurrentTime2()};.

Which one is better? Or are they almost the same?

Aucun commentaire:

Enregistrer un commentaire