易截截图软件、单文件、免安装、纯绿色、仅160KB

Windows via C/C++:线程的执行时间

计算线程执行某项任务消耗的时间时,许多开发人员会调用GetTickCount/GetTickCount64编写如下的代码:
// Get the current time (start time)
ULONGLONG qwStartTime = GetTickCount64();
// Perform complex algorithm here
// Subtract start time from current time to get duration
ULONGLONG dwElapsedTime = GetTickCount64() - qwStartTime;
这段代码假设当前线程不会被中断。然而在Windows这样的基于优先级的操作系统中,开发人员无法得知线程被调度的准确时间。当线程在执行任务中被中断时,使用上面的方法根本无法获得线程所消耗的时间。我们需要一个可以返回线程消耗的CPU时间(既被调度时间)的函数,幸运的是,在Vista之前的操作系统已经提供了GetThreadTimes做到这一点:
BOOL GetThreadTimes(HANDLE hThread,
PFILETIME pftCreationTime,
PFILETIME pftExitTime,
PFILETIME pftKernelTime,
PFILETIME pftUserTime);
GetThreadTime函数会将线程相关的时间信息写入为其传递的PFILETIME参数中,各个参数返回值的含义如下表所示:
参数
意义
pftCreationTime
从1601年1月1号凌晨开始到指定线程被创建时的时间,以100纳秒为单位
pftExitTime
从1601年1月1号凌晨开始到指定线程结束所花的时间,以100纳秒为单位,假如线程尚未终止,则该值未定义
pftKernelTime
线程在内核模式下运行所花的时间,以100纳秒为单位
pftUserTime
线程在用户模式下运行所花的时间,以100纳秒为单位
使用GetThreadTimes可以计算线程所消费的CPU时间,比如下面的代码:
__int64 FileTimeToQuadWord(PFILETIME pft) {
return (Int64ShllMod32(ptf->dwHighDateTime, 32) | ptf->dwLowDateTime);
}
void PerformLongOperation() {
FILETIME ftKernelTimeStart, ftKernelTimeEnd;
FILETIME ftUserTiimeStart, ftUserTimeEnd;
FILETIME ftDummy;
__int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
// Get starting times
GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeStart, &ftUserTimeStart);
// Perform complex algorithm here
...
// Get the ending times
GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, &ftKernelTimeEnd, &ftUserTimeEnd);
// Get the elapsed kernel and user times by c


相关文档:

java调用C/C++写的dll

Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性。
Java调用C/C++写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过程中容易出现问题,DLL中可能需要做相应的转换。
使用Java调用DLL动态链接库的方案通常有三种:JNI, Ja ......

C/C++经典排序算法

排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。
    而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。
    对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲 ......

语言喜爱程度:C > C++ > C#

曾经认为,学好C语言打遍天下无敌手。 后来发现为了面向对象,不得不用C++,后来发现面向对象果然是非常伟大的思想! 再后来,从VS6.0这个版本之后,VC就已经没有什么太大的变化了,MFC等等都已经稳定下来了,微软不玩了,微软跑到.net平台上面去玩了!!微软一些新的应用,全部都跑到.net平台上去了,VC平台个人觉得就剩 ......

[面试题]C基础题目

编者按:非常基本关于C语言的问题,一个信息类(计算机,资讯工程,电子工程, 通信
工程)专业的本科毕业生应该达到的水平。题目不难,全部都能快速地答完,当然也需要
一定的知识储备。
对于大多数人,我们预期你可能答错 1)  4)  15)题,所以答错3道以内的,我们认为
你很棒
答错5道题以 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号