以下代码我测试了一下,绝对是OK的。。希望能帮助到你,显示完全正常。。
CString str;//获取系统时间
CTime tm;
tm=CTime::GetCurrentTime();
str=tmFormat("%Y");//str=tmFormat("%Y-%m-%d %X");
year=atoi(str);
str=tmFormat("%m");//str=tmFormat("%Y-%m-%d %X");
month=atoi(str);
str=tmFormat("%d");//str=tmFormat("%Y-%m-%d %X");
day=atoi(str);
str=tmFormat("%X");//str=tmFormat("%Y-%m-%d %X");
hour=atoi(strLeft(2));
min=atoi(strMid(3,2));
sec=atoi(strMid(6,2));
首先,我们要明确的一点是,c语言的输出方向是从右到左的
得到的结果是vc60:7,21,5
win-tc:8,20,5
通过结果可以看到,最右边都是输出5。
win-tc 8 8+7+5 5 = 8 20 5 <-
vc60 7 7+7+7 5 = 7 21 5 ->
通过资料查找,我们可以知道,
win-tc编译用的是指针 ,vc60用的是栈;
下面,我们重点讲一下vc60
因为用的是栈,所以
第一次输出为5
第二次输出为21(原因:统一将i增值,在赋值给i,i=7,三次加即为21)
第二次输出为7 (原因:i++这个要在输出完成后在加上去)
希望以上对你有帮助
2010年10月2日7:35:55
另外,团IDC网上有许多产品团购,便宜有口碑
是:sys/timebh
具体用法:
# include<stdioh>
#include<sys/timebh>
int main()
{
timeb t1, t2;
long t;
double x, sum = 1, sum1;
int i, j, n;
printf("请输入 x, n");
scanf("%lf%d",&x,&n);
ftime(&t1);
for(i=1; i <= n; i ++)
{
sum1 = 1;
for(j=1; j <= i; j++)
{
sum1 = sum1 (-10 / x);
}
sum += sum1;
}
ftime(&t2);
t = (t2time - t1time)1000 + (t2millitm - t1millitm);
printf("sum = %f,用时%ld毫秒\n",sum,t);
return 0;
}
这个是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的也应该一样,只不过位数不同罢了
网上找的,对你应该有帮助。。。
#include <stdioh>
#include <sys/timeh>
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tvtv_sec 1000 + tvtv_usec / 1000;
}
int main()
{
printf("c/c++ program:%ld\n",getCurrentTime());
return 0;
}
这个就是当前的毫秒值。至于你什么时候取,就看你自己了。
你说的这种情况,你可以在main的时候读取一个初值,然后再后续读取出来的值减去前面这个初值就ok了。
以上就是关于VC++6.0下,C语言怎样提取系统时间且将其用于求时间差运算全部的内容,包括:VC++6.0下,C语言怎样提取系统时间且将其用于求时间差运算、怎样用c语言设计计算程序执行的时间最好有程序,可以再vc6++上执行、VC++ 6.0为什么无法#include <sys/time.h>我是64位win7,有关系吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)