简易的windows下命令行统计程序运行时间程序
2010-11-19 20:48
465 查看
熟悉的Unix的朋友都知道Unix下有一个功能强大的 time 函数。但是在windows下是没有这样的程序的。
本文参考了别人的写的这种程序并做了改进。
1. 剖析命令行参数需要用gcc的getopt(argc,argv,"hE:p:s") 函数: (PS: 没有GCC 环境的同学可以用IBM写的一个windows下的getopt 程序,附件中会给出来。)
2. 根据路径启动程序. 这里看到有人用 ShellExecute 来实现。这样实现有个缺点就是无法把程序的输出展现在当前命令行窗口中。所以我用CreateProcess 来启动程序,同时把程序的输出重定位到标准输出窗口(STDOUT)就可以了。
3. 统计时间。这里有很多统计方法: GetTickCount () 或者用更精确的 QueryPerformanceCounter() 和 QueryPerformanceFrequency() 来统计时间。但是MS 提供一个API GetProcessTimes() 可以精确统计这个进程的核心态和用户态时间,所以这里用这个来实现。
最后放上效果照片和源程序。
图片查看
源码下载
总结:
l 学习了 getopt 的使用和源码
l 熟悉了进程创建和输出重定位
l 学习了获取进程运行时间以及QueryPerformanceCounter() 和 QueryPerformanceFrequency()用法。
(转载请注明出处)
本文参考了别人的写的这种程序并做了改进。
1. 剖析命令行参数需要用gcc的getopt(argc,argv,"hE:p:s") 函数: (PS: 没有GCC 环境的同学可以用IBM写的一个windows下的getopt 程序,附件中会给出来。)
int opt = 0; while((opt=getopt(argc,argv,"hE:p:s"))!=-1) { switch (opt) { case 'h': usage(); //输出帮助信息 return 0; case 'p': strcpy(param, optarg); //待统计的程序的启动参数 break; case 'E': strcpy(file, optarg); //待统计的程序的路径名称 break; default: err_msg(); //出错信息 return 0; } }
2. 根据路径启动程序. 这里看到有人用 ShellExecute 来实现。这样实现有个缺点就是无法把程序的输出展现在当前命令行窗口中。所以我用CreateProcess 来启动程序,同时把程序的输出重定位到标准输出窗口(STDOUT)就可以了。
STARTUPINFO s={sizeof ( s ) }; s.dwFlags =STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES; s.hStdOutput =GetStdHandle(STD_OUTPUT_HANDLE); //输出重新定位到标准输出 s.wShowWindow =SW_HIDE; PROCESS_INFORMATION pi={0}; if ( CreateProcess (file, (param[0] == 0) ? NULL : param, NULL, NULL, TRUE, 0, NULL, NULL, &s, &pi) ) { WaitForSingleObject ( pi.hProcess ,INFINITE ); CloseHandle ( pi.hThread ); CloseHandle(pi.hProcess); }
3. 统计时间。这里有很多统计方法: GetTickCount () 或者用更精确的 QueryPerformanceCounter() 和 QueryPerformanceFrequency() 来统计时间。但是MS 提供一个API GetProcessTimes() 可以精确统计这个进程的核心态和用户态时间,所以这里用这个来实现。
FILETIME createTime, exitTime, kernelTime, userTime; GetProcessTimes(pi.hProcess, &createTime, &exitTime, &kernelTime, &userTime); printf("/n---------------over----------------------------------/n"); printf("Kernel Time: %dms/n", kernelTime.dwLowDateTime); printf("User Time: %dms/n", userTime.dwLowDateTime); printf("Total Time: %dms/n", exitTime.dwLowDateTime - createTime.dwLowDateTime);
最后放上效果照片和源程序。
图片查看
源码下载
总结:
l 学习了 getopt 的使用和源码
l 熟悉了进程创建和输出重定位
l 学习了获取进程运行时间以及QueryPerformanceCounter() 和 QueryPerformanceFrequency()用法。
(转载请注明出处)
相关文章推荐
- linux下的时间相关函数以及如何统计程序运行时间
- c++统计程序运行时间的方法
- QT程序运行时间统计
- 如何准确的统计自己程序的运行时间
- CCS 3.3中统计程序运行的时间
- 统计程序运行时间 微秒级计时器
- java统计程序运行的时间
- windows计算程序运行时间
- DSP学习-----CCS3.3 利用profile对程序的运行时间进行统计
- linux 统计 程序运行时间
- linux 统计 程序运行时间
- 基因数据处理17之使用scala对BWA运行结果进行各阶段程序时间提取和统计求和
- 如何准确的统计自己程序的运行时间
- Windows 下后台运行命令行程序
- 一个电脑运行时间统计程序
- linux 统计 程序 运行时间
- 不仅是命令行,Windows 10 也可以运行 Linux 的图形界面程序了
- Windows命令行报错:'findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件
- Java统计程序运行时间(转)
- Windows下精确获取程序运行时间