转自:http://blog.jeoygin.org/2012/03/c-get-time-millisecond.html

在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精 确到代码块或某个操作运行时所消耗的时间,time命令就不给力了。如果对时间的精度要求不高的话,可以调用标准C的接口time来得到开始和结束的时 间,再调用difftime接口来计算时间差,精度是秒,代码如下所示:

下载: time.c
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(){
  4. time_t t_start, t_end;
  5. t_start = time(NULL) ;
  6. sleep(3000);
  7. t_end = time(NULL) ;
  8. printf("time: %.0f s\n", difftime(t_end,t_start)) ;
  9. return 0;
  10. }

如果要让程序休眠3秒,Windows使用Sleep(3000),Linux使用sleep(3),即Windows的Sleep接口的参数的单位是毫秒,Linux的sleep接口的参数的单位是秒。

如果需要精确到毫秒,以上程序就发挥不了作用,如果在Java要达到这要求就很简单了,代码如下所示:

下载: Time.java
  1. publicclassTime{
  2. public staticvoidmain(String[]args){
  3. try {
  4. long startTime = System.currentTimeMillis();
  5. Thread.sleep(3000);
  6. long endTime = System.currentTimeMillis();
  7. System.out.println("time: " + (endTime - startTime) + " ms");
  8. } catch(InterruptedExceptione){
  9. e.printStackTrace();
  10. }
  11. }
  12. }

通过Google找了一些资料后,发现C语言里没有标准的接口可以获得精确到毫秒的时间,都会调用到与操作系统相关的API,下面会分别介绍在Linux和Windows系统下的多种实现方法,希望对大家有帮助。

Linux系统

使用gettimeofday接口:

下载: gettimeofday.c
  1. #include <stdio.h>
  2. #include <sys/time.h>
  3. int main(){
  4. struct timevalstart, end;
  5. gettimeofday( &start, NULL );
  6. sleep(3);
  7. gettimeofday( &end, NULL );
  8. int timeuse = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec;
  9. printf("time: %d us\n", timeuse);
  10. return 0;
  11. }

gettimeofday能得到微秒数,比毫秒还要更精确。

使用ftime接口:

下载: ftime.c
  1. #include <stdio.h>
  2. #include <sys/timeb.h>
  3. long longgetSystemTime(){
  4. struct timebt;
  5. ftime(&t);
  6. return 1000 * t.time + t.millitm;
  7. }
  8. int main(){
  9. long longstart=getSystemTime();
  10. sleep(3);
  11. long longend=getSystemTime();
  12. printf("time: %lld ms\n", end-start);
  13. return 0;
  14. }

Windows系统

使用GetTickCount接口:

下载: GetTickCount.c
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main(){
  4. DWORD start, stop;
  5. start = GetTickCount();
  6. Sleep(3000);
  7. stop = GetTickCount();
  8. printf("time: %lld ms\n", stop - start);
  9. return 0;
  10. }

Windows系统下有些编译器使用printf输出64位整数参数要使用%I64d,比如VC。

使用QueryPerformanceX接口:

下载: QueryPerformance.c
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main(){
  4. LARGE_INTEGER li;
  5. LONGLONG start, end, freq;
  6. QueryPerformanceFrequency(&li);
  7. freq = li.QuadPart;
  8. QueryPerformanceCounter(&li);
  9. start = li.QuadPart;
  10. Sleep(3000);
  11. QueryPerformanceCounter(&li);
  12. end = li.QuadPart;
  13. int useTime =(int)((end - start) * 1000 / freq);
  14. printf("time: %d ms\n", useTime);
  15. return 0;
  16. }

使用GetSystemTime接口:

下载: GetSystemTime.c
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main(){
  4. SYSTEMTIME currentTime;
  5. GetSystemTime(&currentTime);
  6. printf("time: %u/%u/%u %u:%u:%u:%u %d\n",
  7. currentTime.wYear,currentTime.wMonth,currentTime.wDay,
  8. currentTime.wHour,currentTime.wMinute,currentTime.wSecond,
  9. currentTime.wMilliseconds,currentTime.wDayOfWeek);
  10. return 0;
  11. }

这种方法没给出计算时间差的实现,只给出如何用GetSystemTime调用得到当前时间,计算时间差比较简单,根据年、月、日、时、分秒和毫秒计算出一个整数,再将两整数相减即可。

后记

以上是通过Google找到一些用C语言获得精确到毫秒的实现方法,对比Linux和Windows的方法,发现两个系统的API命名很不一样,Linux接口名要么都是小写要么使用下划线(_)来分隔单词,而Windows接口名中的单词首字母大写。

转载于:https://www.cnblogs.com/glorylandhyf/archive/2013/05/10/3071319.html

[转]C语言如何获得精确到毫秒的时间相关推荐

  1. C语言如何获得精确到毫秒的时间

    在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了 ...

  2. java 怎么用毫秒_java1.8中如何使用精确到毫秒的时间

    SimpleDateFormat,用于显示时间的格式. Date,获取精确到毫秒的时间. Calendar,获取日历格式的时间. 示例代码如下: package baseAPI; import jav ...

  3. mysql精确到毫秒_mysql 时间类型精确到毫秒、微秒及其处理

    一.MySQL 获得毫秒.微秒及对毫秒.微秒的处理 MySQL 较新的版本中(MySQL 6.0.5),也还没有产生微秒的函数,now() 只能精确到秒. MySQL 中也没有存储带有毫秒.微秒的日期 ...

  4. Java精确到毫秒获取时间的三种方法,以及适用场景

    目前获取毫秒值时间戳大概有下面三种方法 // 方法一 System.currentTimeMillis(); // 方法二 Calendar.getInstance().getTimeInMillis ...

  5. oracle当前毫秒时间,oracle获得当前时间,精确到毫秒并指定精确位数

    oracle获得当前时间的,精确到毫秒   可以指定精确豪秒的位数 select to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff ') from dual; ...

  6. Excel使用之时间相加减(精确到毫秒)

    一.工具: 使用Excel2013 二.操作步骤: 可以对精确到毫秒的时间相减统计2个数据相差或相加计算数据之和,具体操作如下: 1.时间相减,统计2个时间点之差 (1)首先保证需要相加减时间个数一一 ...

  7. c linux time微秒_qt linux系统获取当前时间(精确到毫秒、微秒)-Go语言中文社区...

    qt linux系统获取当前时间(精确到毫秒.微秒) Windows系统获取系统时间可以直接用SYSTEMTIME t;,将Windows平台程序移植到linux后,SYSTEMTIME将不再试用,如 ...

  8. android 获取当前时间精确到毫秒的两种方法

    1.概述 在android app开发中,在项目中有些功能需求要求要获取当前时间精确到毫秒,已便于完成功能开发的需要,而在android 的系统api中提供了SimpleDateFormat和Cale ...

  9. java calendar 毫秒_java Calendar(将时间精确到毫秒)

    package com.neusoft.date; import java.util.Calendar; import java.util.Date; import java.util.Gregori ...

  10. timestamp显示毫秒_mysql解决datetime与timestamp精确到毫秒的问题

    CREATE TABLE `tab1` ( `tab1_id` VARCHAR(11) DEFAULT NULL, `create` TIMESTAMP(3) NULL DEFAULT NULL, ` ...

最新文章

  1. 深入理解Semaphore
  2. Idea之使用Gradle开发Java项目
  3. Google Play Service中安全检测API的使用说明
  4. 微软提出AdaLM,用于开发小型、快速且有效的领域预训练语言模型
  5. AQS.acquireQueued
  6. C Shuffle Cards
  7. Sysbench压测
  8. MSDN 教程短片 WPF 20(绑定3-ObjectDataProvider)
  9. mysql 8 nosql_MySQL8.0-NoSQL和SQL的对比及MySQL的优势
  10. Android Camera 运行流程
  11. 怎样使用BMFont生成fnt字体
  12. FineReport帆软报表的安装
  13. perl 教程网站 记录
  14. 基于生长的棋盘格角点检测方法 代码介绍
  15. 简单的基于规则的汉语拼音分词
  16. 条纹噪声图片_红外图像条纹噪声消除方法
  17. 看穿 137 亿光年,中国天眼会帮我们找到「三体星」吗?|创新大会 2021
  18. 正版计算机软件识别方法,微软正版软件如何识别?
  19. 笔记——三维世界坐标和二维画布/屏幕坐标转换
  20. javascript进度条(js实例)

热门文章

  1. IPSEC ×××实验(一)
  2. 免费素材下载:学校学院相关图标集
  3. POI实现超大数据的Excel的读写操作
  4. python2和python3的编码区别
  5. 谈薪资被 HR 怼了:估计你一辈子就是个程序员!气不过啊。。。
  6. 这14个Java核心并发容器,Java高手和低手的区别点
  7. Android开发的前景到底怎么样?
  8. python画五角星_Python第25课:海龟绘图_自定义函数的应用
  9. 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
  10. mongodb 集群shard_MongoDB 分片集群环境搭建