C语言_获取时间
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
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 银河驿站
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果