当前位置:首页 > 技术文章 > 正文内容

c++ 杂项(1) 获取系统启动运行时间

zonemu1周前 (07-25)技术文章8

1、获取系统启动运行时间

a、windows平台使用

ULONGLONG GetTickCount64(VOID);

示例:

#include <iostream>  
#include <windows.h>  
  
int main() {  
    std::cout << "系统运行时间: " << GetTickCount64() << " 毫秒" << std::endl;  
    return 0;  
}

b、linux 平台使用

int clock_gettime (clockid_t __clock_id, struct timespec *__tp)

示例:

#include <stdio.h>  
#include <time.h>  
  
int main() {  
    struct timespec ts;  
    clock_gettime(CLOCK_MONOTONIC, &ts);
    std::cout << "系统运行时间: " << (int64_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000) << " 毫秒" << std::endl; 
    return 0;  
}

结合下, 以一个工具类封装:

#ifndef __XX_TOOL_H__
#define __XX_TOOL_H__

#include <stdint.h>
#ifdef _WIN32
#include <windows.h>
#else
#include <time.h>
#endif

class XXTool {
public:

    //系统运行时间
    static int64_t GetTickCount() {
#ifdef _WIN32
        return ::GetTickCount64();
#else
        struct timespec ts;
        clock_gettime(CLOCK_MONOTONIC, &ts);
        return (int64_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000);
#endif
    }
};

#endif

惯例, 使用文心一言分析修正

您这段代码是一个用于获取系统运行时间的函数。它首先检查是否定义了_WIN32宏,如果是,则使用Windows API的GetTickCount64函数来获取高精度时间戳。如果未定义该宏(即代码运行在非Windows平台上),则使用clock_gettime函数获取当前时间,并计算出自系统启动以来的时间(以毫秒为单位)。

这段代码的主要目的是提供一种跨平台的方法来获取系统运行时间,无论是在Windows还是其他操作系统上。

以下是该代码的逐行解释:

  1. //系统运行时间: 这是一个注释,用于解释接下来的代码功能。
  2. static int64_t GetTickCount() {: 定义一个静态函数GetTickCount,该函数返回一个int64_t类型的时间戳。
  3. #ifdef _WIN32: 这是一个预处理指令,检查是否定义了_WIN32宏。
  4. return ::GetTickCount64();: 如果_WIN32宏已定义(即在Windows平台上),则调用Windows API的GetTickCount64函数来获取高精度时间戳,并返回。
  5. #else: 如果未定义_WIN32宏(即在非Windows平台上)。
  6. struct timespec ts;: 定义一个timespec结构体变量ts,用于存储时间信息。
  7. clock_gettime(CLOCK_MONOTONIC, &ts);: 使用clock_gettime函数获取当前时间,并存储在ts结构体中。这里使用的是CLOCK_MONOTONIC时钟,它是一个单调时钟,不受系统时间调整的影响。
  8. return (int64_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000);: 将获取的时间(秒和纳秒)转换为毫秒并返回。
  9. #endif: 结束条件编译块。

总结:该代码的目的是提供一种跨平台的方法来获取系统运行时间,根据不同的操作系统使用相应的方法来实现。在Windows上使用Windows API,在其他操作系统上使用clock_gettime函数。

相关文章

vue3-内置组件-Teleport(vue内置指令有哪些)

Teleport<Teleport> 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。基本用法有时我们可能会遇到这样的场景:一个组件模板的一部...

前端React面试基础系列(React基础篇)

本文阅读8分钟,喜欢的小伙伴可以持续关系小编哦1. 什么是受控组件和非受控组件?受控组件像表单元素在用户输入时,像<input> <select>等元素需要绑定一个 chang...

10分钟搞定gitlab-ci自动化部署(gitlab ci 配置)

gitlab-ci 是持续集成工具/自动化部署工具,类似 jenkins。持续集成 是将代码集成到共享存储库并尽可能早地自动构建/测试每个更改的实践 - 通常一天几次。概述在编码完成时都会进行打包发布...

java调用API操作GitLab(java调用zabbix api)

最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查...

GIT最佳实践,高效提升多团队协同开发效率

多个团队共同维护同一个微服务模块时,经常出现A团队已发布的功能,B团队提交测发布出现冲突或缺失,如何有效解决多团队共同维护的问题呢?常用的版本管理工具有GIT、SVN,这两种版本管理工具,各有千秋;虽...

程序员项目经理如何调动组员积极性

#这个方法应该很适合程序员都说程序员是比较傲娇,有点小自负(有的是相当,那不叫自负,那是实力的体现好吗),略微呆萌,自尊心偏小强的一类族群。是吗?中招了吗?作为管理好几个组员,要完成一个大项目的项目经...