读取纳秒值的数据类型是什么?

时间:2014-05-12 11:12:36

标签: c++ c types

我正在读取纳秒值,并希望将其存储在特定变量中,这样我就不会丢失数据。有人能告诉我什么可能是数据类型?

示例:

struct timespec ts;
getrawmonotonic(&ts);
end_time = timespec_to_ns(&ts);

end_time的数据类型是什么?

3 个答案:

答案 0 :(得分:3)

在C ++中,这将是std::chrono::nanoseconds。例如,要查找执行某些代码所需的(墙 - )时间长度,您可以编写:

auto start = std::chrono::system_clock.now();

//do some things
//...

auto end = std::chrono::system_clock.now();
std::chrono::nanoseconds nanoseconds_taken =
    duration_cast<std::chrono::nanoseconds>(end - start);
std::cout << "Took: " << nanoseconds_taken.count() << " nanoseconds\n";

答案 1 :(得分:0)

timespec_to_ns的定义如下所示:

/**
 * timespec_to_ns - Convert timespec to nanoseconds
 * @ts:         pointer to the timespec variable to be converted
 *
 * Returns the scalar nanosecond representation of the timespec
 * parameter.
 */
static inline s64 timespec_to_ns(const struct timespec *ts)
{
        return ((s64) ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec;
}

所以你应该把它存储在64位整数中。

答案 2 :(得分:0)

这实际上取决于timespec_to_ns的确切规范。

For linux,类型为s64。在您自己的系统上,您应该能够通过查看声明timespec_to_ns的标题来确定类型。

在一般情况下(仅限C ++),您可以使用auto自动推断出正确的返回类型:

struct timespec ts;
auto end_time = timespec_to_ns(&ts);

//Convert to milliseconds:
auto millis = end_time/1000000.