广告位联系
返回顶部
分享到

C++中使用不同平台的时间函数及对比介绍

C语言 来源:互联网 作者:佚名 发布时间:2024-06-20 21:34:11 人浏览
摘要

在 C++ 编程中,时间函数的选择对于性能测量、任务调度和时间戳记录至关重要。不同的操作系统提供了不同的时间函数,同时在同一个平台上,也可能有多种不同的时间函数可供选择。本文将

在 C++ 编程中,时间函数的选择对于性能测量、任务调度和时间戳记录至关重要。不同的操作系统提供了不同的时间函数,同时在同一个平台上,也可能有多种不同的时间函数可供选择。本文将介绍在 C++ 中常用的时间函数,并比较它们在不同平台上的应用和效果。

跨平台的时间函数:std::chrono

        随着 C++11 的引入,标准库提供了 std::chrono,这是一个现代化的时间库,具有高精度和跨平台的特性。它基于类型安全和模板化的设计,使得时间的测量和计算变得更加简单和可靠。        

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <iostream>

#include <chrono>

#include <thread>

int main() {

    // 获取当前时间点

    auto start = std::chrono::high_resolution_clock::now();

    // 模拟工作(例如,暂停 1 秒)

    std::this_thread::sleep_for(std::chrono::seconds(1));

    // 获取当前时间点

    auto end = std::chrono::high_resolution_clock::now();

    // 计算持续时间

    std::chrono::duration<double> duration = end - start;

    std::cout << "Duration: " << duration.count() << " seconds\n";

    return 0;

}

        在这个示例中,std::chrono::high_resolution_clock 提供了高分辨率的时间点,std::chrono::duration<double> 用于表示时间间隔。这些功能在大多数现代操作系统上都可用,因此非常适合跨平台开发。

Windows 平台的时间函数

        在 Windows 上,有几种常用的时间函数,适合不同的时间需求。

GetSystemTime 和 GetLocalTime

        这些函数提供了系统时间和本地时间的访问:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

#include <iostream>

#include <windows.h>

int main() {

    SYSTEMTIME st;

    GetSystemTime(&st); // 获取系统时间(UTC 时间)

    std::cout << "System Time (UTC): "

              << st.wYear << "-"

              << st.wMonth << "-"

              << st.wDay << " "

              << st.wHour << ":"

              << st.wMinute << ":"

              << st.wSecond << "."

              << st.wMilliseconds << "\n";

    GetLocalTime(&st); // 获取本地时间

    std::cout << "Local Time: "

              << st.wYear << "-"

              << st.wMonth << "-"

              << st.wDay << " "

              << st.wHour << ":"

              << st.wMinute << ":"

              << st.wSecond << "."

              << st.wMilliseconds << "\n";

    return 0;

}

QueryPerformanceCounter

        这是一个高精度的计时器,适合精确测量时间间隔:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include <iostream>

#include <windows.h>

int main() {

    LARGE_INTEGER frequency;

    LARGE_INTEGER start, end;

    // 获取高精度计时器的频率

    QueryPerformanceFrequency(&frequency);

    // 获取开始时间

    QueryPerformanceCounter(&start);

    // 模拟工作(例如,暂停 1 秒)

    Sleep(1000);

    // 获取结束时间

    QueryPerformanceCounter(&end);

    // 计算持续时间

    double duration = static_cast<double>(end.QuadPart - start.QuadPart) / frequency.QuadPart;

    std::cout << "High-resolution duration: " << duration << " seconds\n";

    return 0;

}

Unix/Linux 平台的时间函数

        在 Unix/Linux 系统上,也有多种时间函数可供选择。

gettimeofday

        这是一个高分辨率的计时函数,返回自 Epoch 以来的秒数和微秒数:

1

2

3

4

5

6

7

8

9

#include <iostream>

#include <sys/time.h>

int main() {

    struct timeval tv;

    gettimeofday(&tv, nullptr);

    std::cout << "Seconds: " << tv.tv_sec << "\n";

    std::cout << "Microseconds: " << tv.tv_usec << "\n";

    return 0;

}

clock_gettime

        提供了更高的精度,并支持多种时间类型:

1

2

3

4

5

6

7

8

9

#include <iostream>

#include <ctime>

int main() {

    struct timespec ts;

    clock_gettime(CLOCK_MONOTONIC, &ts);

    std::cout << "Seconds: " << ts.tv_sec << "\n";

    std::cout << "Nanoseconds: " << ts.tv_nsec << "\n";

    return 0;

}

相同平台的不同时间函数对比

        即使在同一个操作系统上,也可能有多个不同的时间函数可供选择。例如,Windows 上的 GetSystemTime 提供了系统时间,而 QueryPerformanceCounter 则提供了高精度的计时器功能。在 Unix/Linux 上,gettimeofday 和 clock_gettime 分别提供了不同精度和用途的时间测量。

使用跨平台库

        除了原生的操作系统时间函数外,还可以考虑使用跨平台的第三方库,如 Boost 库中的时间模块。Boost.Chrono 提供了与 std::chrono 类似的功能,同时保持了更好的兼容性和可移植性。

1

2

3

4

5

6

7

8

9

10

11

#include <iostream>

#include <boost/chrono.hpp>

int main() {

    boost::chrono::high_resolution_clock::time_point start = boost::chrono::high_resolution_clock::now();

    // 模拟工作

    boost::this_thread::sleep_for(boost::chrono::seconds(1));

    boost::chrono::high_resolution_clock::time_point end = boost::chrono::high_resolution_clock::now();

    boost::chrono::duration<double> duration = end - start;

    std::cout << "Duration: " << duration.count() << " seconds\n";

    return 0;

}

结论

        选择合适的时间函数取决于你的应用程序需求,如精度、平台兼容性和功能特性。在现代 C++ 中,std::chrono 提供了一个强大的跨平台时间库,推荐用于大多数时间测量和计时任务。而对于特定平台或需要更高精度的情况,可以考虑使用操作系统提供的特定时间函数或第三方库进行扩展。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • C++的dynamic代码介绍
    在C++编程中,dynamic_cast是处理多态类型转换的关键工具,允许在复杂继承结构中安全地将基类指针或引用转换为派生类指针或引用。通过利
  • C++中使用不同平台的时间函数及对比介绍
    在 C++ 编程中,时间函数的选择对于性能测量、任务调度和时间戳记录至关重要。不同的操作系统提供了不同的时间函数,同时在同一个平台
  • C++中VTK9.3.0刻度标签重叠的问题记录

    C++中VTK9.3.0刻度标签重叠的问题记录
    本文采用VTK9.3.0版本,其他版本如VKT8.0亦有同样的问题 VTK显示文本时,Z轴刻度标签出现了重叠,如下图: 寻找好久,没有找到设置标签间距
  • C++拷贝构造函数和赋值运算符重载介绍

    C++拷贝构造函数和赋值运算符重载介绍
    一,拷贝构造函数 1. 什么是拷贝构造函数 拷贝构造函数是特殊的构造函数。是用一个已经存在的对象,赋值拷贝给另一个新创建的已经存在
  • C++中生成随机数的方法介绍

    C++中生成随机数的方法介绍
    背景 C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。 C 生成随机数 概述 C 语言中使用 rand() 函数产生 0 ~ RA
  • c++项目中后缀名vcxproj和sln的区别及说明
    c++项目后缀名vcxproj和sln区别 `.vcxproj 文件 是 Visual Studio 中用于存储 C++ 项目配置和设置的 XML 文件。 它包含了项目的编译选项、链接选项、
  • C++项目实战之makefile使用

    C++项目实战之makefile使用
    makefile简介 一个工程中的源文件不计其数(一个项目有有很多的文件),现在的项目基本都是按模块进行划分的,而这些模块存放在若干目录中
  • c++的构造函数使用方式介绍
    1.什么是构造函数? C++中的构造函数是一种特殊的成员函数,用于在创建对象时进行初始化操作。 构造函数的名称与类名相同,没有返回类
  • Java集合中获取数据前驱和后继元素的实现
    使用场景 使用一致性hash时,如何找到一个hash值对应的临近节点,可以使用集合中获取数据的前驱和后继元素实现。 1. NavigableSet 和 Navigab
  • C++中sln,vcxproj,vcxproj.filters,lib,dll,exe的含义说明
    sln,vcxproj,vcxproj.filters,lib,dll,exe含义 建立工程 建立C++工程后会生成多个文件 例如 sln,sdf,vcxproj,vcxproj.filters,vcxproj.user这些都是文件的扩展名。
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计