侧边栏壁纸
  • 累计撰写 69 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

C语言_获取时间

秋山人家
2022-08-04 / 0 评论 / 0 点赞 / 40 阅读 / 3,617 字
温馨提示:
本文最后更新于 2022-09-12,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

C语言_获取时间

Linux平台

获取当前时间-秒/毫秒/微秒

#include<stdio.h>
#include<sys/time.h>
int main()
{
  /*******
   * struct timeval{
   *   long int tv_sec; // 秒数
   *   long int tv_usec; // 微秒数
   *}
  *****/

  struct timeval time_now;
  long time_sec = 0;		/**秒 **/
  long time_mil = 0;		/** 毫秒 **/
  long time_mic = 0;		/** 微秒  **/

  /** 返回自1970-01-01 00:00:00到现在经历的秒数 **/
  /** 接口:int gettimeofday(struct timeval*tv, struct timezone *tz); **/
  gettimeofday(&time_now,NULL);
  time_sec = time_now.tv_sec;
  time_mil = time_sec * 1000 + time_now.tv_usec/1000;
  time_mic = time_now.tv_sec*1000*1000 + time_now.tv_usec;

  printf(“second %ld\n”,time_sec);
  printf(“milli_second %ld\n”,time_mil);
  printf(“micro_second %ld\n”,time_mic);

  return 0;
}

获取当前时间-纳秒

#include <stdio.h>
#include <sys/time.h>

int main()
{
    /****
    *struct timespec
    *{
    *   __kernel_time_t tv_sec;  /** 秒 **/
    *  long            tv_nsec;  /** 纳秒 **/
    *};
    ****/
    struct timespec time_now;
    
    /** int clock_gettime (clockid_t __clock_id, struct timespec *__tp) **/
    /*****__clock_id
    *CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变。
    *CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
    *CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间。需要注意是不是进程开始到当前代码的时间。
    *CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间。需要注意是不是线程开始到当前代码的时间。
    ******/
    clock_gettime(CLOCK_REALTIME, &time_now);
    printf("当前时间: %ld 秒,%ld 纳秒", time_now.tv_sec, time_now.tv_nsec);
}

windows平台

获取当前时间-秒/毫秒/微秒

C/C++函数
  • time_t time(time_t *timer);
    返回以格林尼治时间(GMT)为标准,从1970年1月1日00:00:00到现在的此时此刻所经过的秒数。
    time_t实际是个long长整型typedef long time_t;
    头文件:#include <time.h>
#include <stdio.h>
#include <time.h>
int main ()
{
  time_t seconds;
  seconds = time(NULL);
  printf("自 1970-01-01 起的小时数 = %ld\n", seconds/3600);
  return(0);
}
  • clock_t clock(void);
    返回进程启动到调用函数时所经过的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock),以毫秒为单位。
    clock_t实际是个long长整型typedef long clock_t;
    头文件:#include <time.h>
#include<stdio.h>
#include<time.h>

int main()
{
    clock_t start,finish;
    double total = 0;
    int i = 0;
    start = clock();
    for(;i<100000;++i)
    {
      fun_test();
    }
    finish = clock();
    total = (double)(finish - start) / CLOCKS_PER_SEC;//将时间转换为秒
    printf("CPU 占用的总时间:%f\n", total);
    return 0;
}
WINDOWS_API函数
  • timeGetTime()
    函数以毫秒计的系统时间。该时间为从系统开启算起所经过的时间
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")

void main()
{
	DWORD t_begin, t_end;
	t_begin = timeGetTime();
	Sleep(1230);
	t_end = timeGetTime();
	printf("%.3f\n", (t_end - t_begin) / 1000.0);

	system("pause");
}
  • GetTickCount()
    GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
#include <windows.h>
void main()
{
	DWORD t_begin, t_end;
	t_begin = GetTickCount();
	Sleep(1230);
	t_end = GetTickCount();
	printf("%.3f\n", (t_end - t_begin) / 1000.0);

	system("pause");
}
  • QueryPerformanceCounter()
    函数返回高精确度性能计数器的值,它可以以微妙为单位计时.但是QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以,必须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率.
#include <windows.h>
void main()
{
   //用QueryPerformanceCounter()来计时  微秒  
    LARGE_INTEGER  large_interger;  
    double dff;  
    __int64  c1, c2;  
    QueryPerformanceFrequency(&large_interger);  
    dff = large_interger.QuadPart;  
    QueryPerformanceCounter(&large_interger);  
    c1 = large_interger.QuadPart;  
    Sleep(800);  
    QueryPerformanceCounter(&large_interger);  
    c2 = large_interger.QuadPart;  
    printf("本机高精度计时器频率%lf\n", dff);  
    printf("第一次计时器值%I64d 第二次计时器值%I64d 计时器差%I64d\n", c1, c2, c2 - c1);  
    printf("计时%lf毫秒\n", (c2 - c1) * 1000 / dff);  
}
  • GetSystemTimeAsFileTime()
#include <windows.h>
#include <time.h>
void main()
{
   FILETIME start_time,end_time;
   GetSystemTimeAsFileTime(&start_time); //单位是100纳秒(ns)
   fun_test();
   GetSystemTimeAsFileTime(&end_time);
   unsigned long long totalus = 10*(end_time - start_time) //微秒 
}

参考网站

https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/time-functions?redirectedfrom=MSDN

0

评论区