这里值得说明的是,要求中windows下的计时函数GetSystemTime()不太好用了,函数返回的是系统的时间,我们要用两次时间相减,这里还要考虑到有负数的情况,所以还要考虑借位,其实windows下面有一个好用的函数clock(),这个函数对于计时很在行。
window:
- #include <iostream>
- #include<windows.h>
- using namespace std;
- int main(int argc,char **argv)
- {
- int year,month,day,hour,minutes,seconds,milliseconds;
- SYSTEMTIME start,end;
- STARTUPINFO si; //一些必备参数设置
- memset(&si, 0, sizeof(STARTUPINFO));
- si.cb = sizeof(STARTUPINFO);
- si.dwFlags = STARTF_USESHOWWINDOW;
- si.wShowWindow = SW_SHOW;
- PROCESS_INFORMATION pi; //必备参数设置结束
- if(!CreateProcess(argv[1],NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
- {
- cout<<"Create Fail!"<<endl;
- exit(1);
- }
- else
- {
- GetSystemTime(&start);
- cout<<"Success!"<<endl;
- }
- WaitForSingleObject(pi.hProcess,INFINITE);
- GetSystemTime(&end);
- milliseconds=end.wMilliseconds-start.wMilliseconds;
- seconds=end.wSecond-start.wSecond;
- minutes=end.wMinute-start.wMinute;
- hour=end.wHour-start.wHour;
- day=end.wDay-start.wDay;
- month=end.wMonth-start.wMonth;
- year=end.wYear-start.wYear;
- if ( milliseconds < 0)
- {
- seconds--;
- milliseconds+=1000;
- }
- if ( seconds < 0 )
- {
- minutes--;
- seconds+=60;
- }
- if ( hour < 0 )
- {
- day--;
- hour+=24;
- }
- if ( day < 0 )
- {
- month--;
- day+=30;
- }
- if ( month < 0 )
- {
- year--;
- month+=12;
- }
- if ( year > 0 )
- {
- printf("%d天",year);
- }
- if ( month > 0 )
- {
- printf("%d月",month);
- }
- if ( day > 0 )
- {
- printf("%d天",day);
- }
- if ( hour > 0 )
- {
- printf("%d小时",hour);
- }
- if ( minutes > 0 )
- {
- printf("%d分钟",minutes);
- }
- if ( seconds > 0 )
- {
- printf("%d秒",seconds);
- }
- if ( milliseconds > 0 )
- {
- printf("%d微秒",milliseconds);
- }
- printf("\n");
- return 0;
- }
linux:
- #include <math.h>
- #include <stdio.h>
- #include <sys/time.h>
- int main(int argc,int **argv)
- {
- int i;
- struct timeval start;
- struct timeval end;
- double timeuse;
- char *exec_argv[4];
- if (argc==1)
- {
- printf("Error!\n");
- exit(0);
- }
- if (fork()==0)
- {
- for (i=0; i<argc; i++)
- {
- exec_argv[i]=argv[i+1];
- printf("[%d]:%s\n", i,exec_argv[i]);
- }
- printf("Child Create\n");
- execv(argv[1],exec_argv);
- }
- else
- {
- gettimeofday( &start, NULL );
- wait(NULL);
- gettimeofday( &end, NULL );
- timeuse = (1000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec)/1000000;
- printf("time:%lfs\n",timeuse);
- }
- return 0;
- }