[转]C语言如何获得精确到毫秒的时间
转自:http://blog.jeoygin.org/2012/03/c-get-time-millisecond.html
在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精 确到代码块或某个操作运行时所消耗的时间,time命令就不给力了。如果对时间的精度要求不高的话,可以调用标准C的接口time来得到开始和结束的时 间,再调用difftime接口来计算时间差,精度是秒,代码如下所示:
- #include <stdio.h>
- #include <time.h>
- int main(){
- time_t t_start, t_end;
- t_start = time(NULL) ;
- sleep(3000);
- t_end = time(NULL) ;
- printf("time: %.0f s\n", difftime(t_end,t_start)) ;
- return 0;
- }
如果要让程序休眠3秒,Windows使用Sleep(3000),Linux使用sleep(3),即Windows的Sleep接口的参数的单位是毫秒,Linux的sleep接口的参数的单位是秒。
如果需要精确到毫秒,以上程序就发挥不了作用,如果在Java要达到这要求就很简单了,代码如下所示:
- publicclassTime{
- public staticvoidmain(String[]args){
- try {
- long startTime = System.currentTimeMillis();
- Thread.sleep(3000);
- long endTime = System.currentTimeMillis();
- System.out.println("time: " + (endTime - startTime) + " ms");
- } catch(InterruptedExceptione){
- e.printStackTrace();
- }
- }
- }
通过Google找了一些资料后,发现C语言里没有标准的接口可以获得精确到毫秒的时间,都会调用到与操作系统相关的API,下面会分别介绍在Linux和Windows系统下的多种实现方法,希望对大家有帮助。
Linux系统
使用gettimeofday接口:
- #include <stdio.h>
- #include <sys/time.h>
- int main(){
- struct timevalstart, end;
- gettimeofday( &start, NULL );
- sleep(3);
- gettimeofday( &end, NULL );
- int timeuse = 1000000 * (end.tv_sec - start.tv_sec) + end.tv_usec - start.tv_usec;
- printf("time: %d us\n", timeuse);
- return 0;
- }
gettimeofday能得到微秒数,比毫秒还要更精确。
使用ftime接口:
- #include <stdio.h>
- #include <sys/timeb.h>
- long longgetSystemTime(){
- struct timebt;
- ftime(&t);
- return 1000 * t.time + t.millitm;
- }
- int main(){
- long longstart=getSystemTime();
- sleep(3);
- long longend=getSystemTime();
- printf("time: %lld ms\n", end-start);
- return 0;
- }
Windows系统
使用GetTickCount接口:
- #include <windows.h>
- #include <stdio.h>
- int main(){
- DWORD start, stop;
- start = GetTickCount();
- Sleep(3000);
- stop = GetTickCount();
- printf("time: %lld ms\n", stop - start);
- return 0;
- }
Windows系统下有些编译器使用printf输出64位整数参数要使用%I64d,比如VC。
使用QueryPerformanceX接口:
- #include <windows.h>
- #include <stdio.h>
- int main(){
- LARGE_INTEGER li;
- LONGLONG start, end, freq;
- QueryPerformanceFrequency(&li);
- freq = li.QuadPart;
- QueryPerformanceCounter(&li);
- start = li.QuadPart;
- Sleep(3000);
- QueryPerformanceCounter(&li);
- end = li.QuadPart;
- int useTime =(int)((end - start) * 1000 / freq);
- printf("time: %d ms\n", useTime);
- return 0;
- }
使用GetSystemTime接口:
- #include <windows.h>
- #include <stdio.h>
- int main(){
- SYSTEMTIME currentTime;
- GetSystemTime(¤tTime);
- printf("time: %u/%u/%u %u:%u:%u:%u %d\n",
- currentTime.wYear,currentTime.wMonth,currentTime.wDay,
- currentTime.wHour,currentTime.wMinute,currentTime.wSecond,
- currentTime.wMilliseconds,currentTime.wDayOfWeek);
- return 0;
- }
这种方法没给出计算时间差的实现,只给出如何用GetSystemTime调用得到当前时间,计算时间差比较简单,根据年、月、日、时、分秒和毫秒计算出一个整数,再将两整数相减即可。
后记
以上是通过Google找到一些用C语言获得精确到毫秒的实现方法,对比Linux和Windows的方法,发现两个系统的API命名很不一样,Linux接口名要么都是小写要么使用下划线(_)来分隔单词,而Windows接口名中的单词首字母大写。
转载于:https://www.cnblogs.com/glorylandhyf/archive/2013/05/10/3071319.html
[转]C语言如何获得精确到毫秒的时间相关推荐
- C语言如何获得精确到毫秒的时间
在做测试或性能优化时,经常要知道程序运行的时间,在Linux系统可以使用time命令来计算程序运行运行所消耗的时间,能精确到毫秒,如果要精确到代码块或某个操作运行时所消耗的时间,time命令就不给力了 ...
- java 怎么用毫秒_java1.8中如何使用精确到毫秒的时间
SimpleDateFormat,用于显示时间的格式. Date,获取精确到毫秒的时间. Calendar,获取日历格式的时间. 示例代码如下: package baseAPI; import jav ...
- mysql精确到毫秒_mysql 时间类型精确到毫秒、微秒及其处理
一.MySQL 获得毫秒.微秒及对毫秒.微秒的处理 MySQL 较新的版本中(MySQL 6.0.5),也还没有产生微秒的函数,now() 只能精确到秒. MySQL 中也没有存储带有毫秒.微秒的日期 ...
- Java精确到毫秒获取时间的三种方法,以及适用场景
目前获取毫秒值时间戳大概有下面三种方法 // 方法一 System.currentTimeMillis(); // 方法二 Calendar.getInstance().getTimeInMillis ...
- oracle当前毫秒时间,oracle获得当前时间,精确到毫秒并指定精确位数
oracle获得当前时间的,精确到毫秒 可以指定精确豪秒的位数 select to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff ') from dual; ...
- Excel使用之时间相加减(精确到毫秒)
一.工具: 使用Excel2013 二.操作步骤: 可以对精确到毫秒的时间相减统计2个数据相差或相加计算数据之和,具体操作如下: 1.时间相减,统计2个时间点之差 (1)首先保证需要相加减时间个数一一 ...
- c linux time微秒_qt linux系统获取当前时间(精确到毫秒、微秒)-Go语言中文社区...
qt linux系统获取当前时间(精确到毫秒.微秒) Windows系统获取系统时间可以直接用SYSTEMTIME t;,将Windows平台程序移植到linux后,SYSTEMTIME将不再试用,如 ...
- android 获取当前时间精确到毫秒的两种方法
1.概述 在android app开发中,在项目中有些功能需求要求要获取当前时间精确到毫秒,已便于完成功能开发的需要,而在android 的系统api中提供了SimpleDateFormat和Cale ...
- java calendar 毫秒_java Calendar(将时间精确到毫秒)
package com.neusoft.date; import java.util.Calendar; import java.util.Date; import java.util.Gregori ...
- timestamp显示毫秒_mysql解决datetime与timestamp精确到毫秒的问题
CREATE TABLE `tab1` ( `tab1_id` VARCHAR(11) DEFAULT NULL, `create` TIMESTAMP(3) NULL DEFAULT NULL, ` ...
最新文章
- 深入理解Semaphore
- Idea之使用Gradle开发Java项目
- Google Play Service中安全检测API的使用说明
- 微软提出AdaLM,用于开发小型、快速且有效的领域预训练语言模型
- AQS.acquireQueued
- C Shuffle Cards
- Sysbench压测
- MSDN 教程短片 WPF 20(绑定3-ObjectDataProvider)
- mysql 8 nosql_MySQL8.0-NoSQL和SQL的对比及MySQL的优势
- Android Camera 运行流程
- 怎样使用BMFont生成fnt字体
- FineReport帆软报表的安装
- perl 教程网站 记录
- 基于生长的棋盘格角点检测方法 代码介绍
- 简单的基于规则的汉语拼音分词
- 条纹噪声图片_红外图像条纹噪声消除方法
- 看穿 137 亿光年,中国天眼会帮我们找到「三体星」吗?|创新大会 2021
- 正版计算机软件识别方法,微软正版软件如何识别?
- 笔记——三维世界坐标和二维画布/屏幕坐标转换
- javascript进度条(js实例)
热门文章
- IPSEC ×××实验(一)
- 免费素材下载:学校学院相关图标集
- POI实现超大数据的Excel的读写操作
- python2和python3的编码区别
- 谈薪资被 HR 怼了:估计你一辈子就是个程序员!气不过啊。。。
- 这14个Java核心并发容器,Java高手和低手的区别点
- Android开发的前景到底怎么样?
- python画五角星_Python第25课:海龟绘图_自定义函数的应用
- 如何测网络稳定性_讲座|复杂网络上的非线性动力学:网络结构如何决定系统稳定性?...
- mongodb 集群shard_MongoDB 分片集群环境搭建