vc ++获取程序执行时间时间

vc ++获取程序执行时间时间,第1张

这个是windows里面常用来计算程序运行时间函数

DWORD dwStart = GetTickCount();

//这里运行你的程序代码

DWORD dwEnd = GetTickCount();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

这个函数只精确到55ms,1个tick就是55ms。

2

timeGetTime()基本等于GetTickCount(),但是精度更高

DWORD dwStart = timeGetTime();

//这里运行你的程序代码

DWORD dwEnd = timeGetTime();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

3

用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。

clock_t clock ( void );

#include <timeh>

clock_t t = clock();

long sec = t / CLOCKS_PER_SEC;

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

4

#include<iostream>

#include<ctime>

using namespace std;

int main()

{

time_t begin,end;

begin=clock();

//这里加上你的代码

end=clock();

cout<<"runtime: "<<double(end-begin)/CLOCKS_PER_SEC<<endl;

}

5

unix时间相关,也是标准库的

这些在<timeh>

1timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;

time_t timegm(struct tm tm);

2mktime使用时区信息

time_t mktime(struct tm tm);

timelocal 函数是GNU扩展的与posix函数mktime相当

time_t timelocal (struct tm tm);

3gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;

struct tm gmtime(const time_t clock);

4localtime使用时区信息

struct tm localtime(const time_t clock);

1time获取时间,stime设置时间

time_t t;

t = time(&t);

2stime其参数应该是GMT时间,根据本地时区设置为本地时间;

int stime(time_t tp)

3UTC=true 表示采用夏时制;

4文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime转换成本地时间;

5设置时区推荐使用setup来设置;

6设置时区也可以先更变/etc/sysconfig/clock中的设置 再将ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t

看看你的系统是否有time_t64,它能表示更大的时间范围

Window里面的一些不一样的

CTime MFC类,好像就是把timeh封了个类,没扩展

CTime t = GetCurrentTime();

SYSTEMTIME 结构包含毫秒信息

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME, PSYSTEMTIME;

SYSTEMTIME t1;

GetSystemTime(&t1)

CTime curTime(t1);

WORD ms = t1wMilliseconds;

SYSTEMTIME sysTm;

::GetLocalTime(&sysTm);

在timeh中的_strtime() //只能在windows中用

char t[11];

_strtime(t);

puts(t);

6

下面是转的一个用汇编的精确计时方法

---------------------------------------------------------------------------------------

如何获得程序或者一段代码运行的时间?你可能说有专门的程序测试工具,确实,不过你也可以在程序中嵌入汇编代码来实现。

在Pentium的指令系统中有一条指令可以获得CPU内部64位计数器的值,我们可以通过代码两次获取该计数器的值而获得程序或代码运行的时钟周期数,进而通过你的cpu的频率算出一个时钟周期的时间,从而算出程序运行的确切时间。

我们通过指令TDSIC来获得cpu内部计数器的值,指令TDSIC返回值放在EDX:EAX中,其中EDX中存放64位寄存器中高32位的值,EAX存放第32位的值

下面看看实现的代码:

//用汇编实现获取一段代码运行的时间

#include<iostream>

using namespace std;

void GetClockNumber (long high, long low);

void GetRunTime();

int main()

{

long HighStart,LowStart,HighEnd,LowEnd;

long numhigh,numlow;

//获取代码运行开始时cpu内部计数器的值

__asm

{

RDTSC

mov HighStart, edx

mov LowStart, eax

}

for(int i= 0; i<100000; i++ )

{

for(int i= 0; i<100000; i++ )

{

}

}

//获取代码结束时cpu内部计数器的值,并减去初值

__asm

{

RDTSC

mov HighEnd, edx

Mov LowEnd, eax

;获取两次计数器值得差

sub eax, LowStart

cmp eax, 0 ; 如果低32的差为负则求返,因为第二次取得永远比第一次的大

jg L1

neg eax

jmp L2

L1: mov numlow, eax

L2: sbb edx, HighStart

mov numhigh, edx

}

//把两个计数器值之差放在一个64位的整形变量中

//先把高32位左移32位放在64的整形变量中,然后再加上低32位

__int64 timer =(numhigh<<32) + numlow;

//输出代码段运行的时钟周期数

//以频率11Gcpu为例,如果换计算机把其中的11改乘其它即可,因为相信大家的cpu都应该在1G以上 ^_^

cout<< (double) (timer /11/1000000000) << endl;

return 0;

}

这样通过一条简单的汇编指令就可以获得程序或一段代码的大概时间,不过并不能得到运行的确切时间,因为即使去掉中间的循环,程序也会有个运行时间,

因为在第一次取得计数器的值后,有两条汇编指令mov HighStart, edx mov LowStart, eax这两条指令当然也有运行时间 ,当然你可以减去这两条指令的运行时间(在11G的机子上是3e-8s),这样会更精确一点。

如果你要确切知道程序的运行时间,专业的测试软件肯定会更好一点,不过好像一般没有必要获取除非专门的要求的程序。

不过能DIY一个也是不错的,不管有没有,最起码你可以学到在VC++中如何嵌入汇编代码以及如何使用32位的寄存器,其实和16位的寄存器一样使用,将来64的也应该一样,只不过位数不同罢了

网上找的,对你应该有帮助。。。

VC2021编写的程序可以称为VC++程序,也可以称为C++程序。VC2021是微软Visual Studio 2021的缩写,它是一种集成开发环境(IDE),用于开发各种应用程序,包括C++程序、C#程序、Visual Basic程序等。在VC++中,可以使用C++语言进行编程,因此VC2021编写的程序也可以称为C++程序。

基本的原理是在执行待测函数之前读取CPU的计数器,执行待测函数之后,再读取一遍,两个计数器之差,再除以CPU主频,就是待测函数执行所用时间。测试精度与CPU主频有关,一般可以精确到微秒量级。

读取CPU计数器的函数:QueryPerformanceCounter()

获取CPU计数器的函数:QueryPerformanceFrequency()

具体 *** 作示范:

首先定义一下所需变量:

LARGE_INTEGER litmp;

LONGLONG QPart1,QPart2;

double dfMinus, dfFreq, dfTim;

在待测函数之前加入:

QueryPerformanceFrequency(&litmp);

dfFreq = (double)litmpQuadPart;// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp);

QPart1 = litmpQuadPart;// 获得初始值

在待测函数加入:

QueryPerformanceCounter(&litmp);

QPart2 = litmpQuadPart;//获得中止值

dfMinus = (double)(QPart2-QPart1);

dfTim = (dfMinus1000) / dfFreq;// 获得对应的时间值,单位为为毫秒

dfTim就是待测函数执行所需的时间了。

如题:PE, VC在投资期占有的公司股权是不同的,PE投资期限一般较短,在2年左右,所占股权比例较低,通常在10%以下。VC投资期限至少3-5年以上,通常占被投资企业股权比例较大(30%左右)。因为PE投资的多为成熟期和发展期的企业,投资行业比较宽泛。PE投资决策建立在专业化和程序化的基础之上,注重被投企业的财务分析。VCVC投资对象多为处于创业期(start-up)的中小型企业,而且多为高新技术企业,很早期的又称“天使投资”,投资主要是看商业模式和企业家精神,要求基金管理人相关行业的专业理解能力较强。

#include<timeh>

main()

{

unsigned long start,stop;

start=time(NULL);

//你的程序

stop=time(NULL);

printf("运行时间:%ld",stop-start);

}

一般都会把自己的程序用for循环运行多遍(如10000),再来计算平均时间。

设置定时器,等待它就可以了。

例子:SetWaitableTimer(hTimer, &liuTC, 6000 10000, NULL, NULL, FALSE);

//第二个参数是你第一次收到定时器响应的时间,你可以设置为13:30:30

//第三个是以后多少毫秒响应一次。

1、首先打开桌面上本地已经安装的VS2017开发工具IDE,如下图所示。

2、依次点击菜单栏中的“文件”->“新建”->“项目”,如下图所示。

3、左侧选择NET Core,项目模板选择控制台应用(NET Core),然后点击“确定”。

4、创建好的项目目录结构如下图所示。

5、打开Programcs文件,将输入内容修改为你好。

6、依次点击菜单栏中的“调试”->“开始执行(不调试)”,如下图所示。

7、运行成功,将会在控制台中输出显示内容,如下图所示。

以上就是关于vc ++获取程序执行时间时间全部的内容,包括:vc ++获取程序执行时间时间、vc2021编写的程序称为、vc++中如何测试程序的运行时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9874002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存