시간 과 시간 차 를 계산 하 는 몇 가지 방법 을 총 결 하 다.

13747 단어 총결산
다음으로 전송: http://blog.csdn.net/coder_xia/article/details/6566708
1. 표준 C 와 C + + 를 모두 사용 할 수 있 습 니 다.
1, 획득 시간 용 timet time (time t * timer), 계산 시간 차 는 double difftime (time t timer 1, time t timer 0) 을 사용 합 니 다. 초 까지 정확 하 다.
테스트 프로그램 은 다음 과 같 습 니 다.
 1 #include <time.h>

 2 #include <stdio.h>

 3 int main()

 4 {

 5     time_t start ,end ;

 6     double cost;

 7     time(&start);

 8     sleep(1);

 9     time(&end);

10     cost=difftime(end,start);

11     printf("%f/n",cost);

12     return 0;

13 }

    이 프로그램 은 fedora 9, ubuntu 테스트 에 통과 되 었 습 니 다.
    코드 중의 sleep 함수 에 대해 주의해 야 할 것 은:
    1) windows 에서 Sleep 함수 이 며 windows. h 를 포함 합 니 다.
    2) sleep 의 수 는 Windows 와 Linux 에서 1000 을 대표 하 는 의미 가 다 릅 니 다. Windows 에서 1000 밀리초, 즉 1 초 를 표시 합 니 다.Linux 에 서 는 1000 초 를 표시 하고 Linux 에 서 는 밀리초 단위 의 함 수 를 사용 하여 usleep 를 사용 할 수 있 습 니 다.
   또한 시간 차 를 계산 하 는 용법 에 대해 볼 수 있다 http://www.cnblogs.com/Anita-z/p/3920417.html.
2、clock_t clock(),clock()
    컴퓨터 가 시 작 된 후 시간 간격 을 얻 고 CPU 시간 을 얻 었 기 때문에 GPU 를 사용 할 때 1 / CLOCKS 까지 정확하게 주의해 야 합 니 다.PER_SEC 초.
    테스트 프로그램 은 다음 과 같 습 니 다.
 1 #include <time.h>

 2 #include <stdio.h>

 3 int main()

 4 {

 5     double start,end,cost;

 6     start=clock();

 7     sleep(1);

 8     end=clock();

 9     cost=end-start;

10     printf("%f/n",cost);

11     return 0;

12 }

 
2. C + + 중 (이곳 은 windows 환경 을 대상 으로 표준 c 에 서 는 Liux 와 windows 가 모두 가능 합 니 다)
1、GetTickCount()
      호출 함 수 는 windows. h 를 포함 해 야 합 니 다.시스템 이 밀리초 까지 정확하게 작 동 하 는 것 을 얻 었 습 니 다. 테스트 프로그램 은 다음 과 같 습 니 다.
 
 1 #include <iostream>

 2 #include <windows.h>

 3 using namespace std;

 4 int main()

 5 {

 6     double start = GetTickCount();

 7     Sleep(1000);

 8     double  end=GetTickCount();

 9     cout << "GetTickCount:" << end-start << endl;

10         return 0;

11 }

 
2、GetLocalTime()
      구조 체 에 저 장 된 year, month 등의 정 보 를 얻 었 다.C 언어 time 함수 획득 은 1970 년 1 월 1 일 0 시 0 분 0 초부 터 이때 까지 의 초 수 입 니 다.gmtime 함수 가 자주 사용 하 는 달력 으로 변환 되 어야 합 니 다.
     c 언어 에서 자주 사용 하 는 달력 을 저장 하 는 구조 체 는 struct tm 로 time. h 에 포함 되 며, c + + 언어 는 SYSTEMTIME 구조 체 로 winbase. h (프로 그래 밍 은 windows. h 를 포함 하면 됩 니 다).물론 정밀도 가 초 일 것 이다.
테스트 프로그램 은 다음 과 같 습 니 다.
 
1 #include <iostream>

2 #include <windows.h>

3 using namespace std;

4 int main()

5 {

6     SYSTEMTIME start; //windows.h 

7     GetLocalTime(&start);//time.h tm        

8     cout<< start.year << endl;

9 }

 
c 언어의 gmtime 방법의 시범 코드 는 다음 과 같다.
 
#include <time.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

    struct tm *tm_ptr;

    time_t the_time;

    (void) time(&the_time);

    tm_ptr = gmtime(&the_time);

    printf("Raw time is %ld/n", the_time);

    printf("gmtime gives:/n");

    printf("date: %02d/%02d/%02d/n", 

        tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);

    printf("time: %02d:%02d:%02d/n",

        tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);

    exit(0);

}

 
또한 c 언어 는 GetLocalTime 방법 과 유사 한 함수 ctime () 가 있 습 니 다.
localtime () 에 대한 원형 은: struct tm * localtime (const time t * timep) 입 니 다.테스트 프로그램의 gmtime 을 localtime 으로 바 꾸 면 출력 시간 이 시간 과 날 짜 를 얻 기 위 한 것 을 볼 수 있 습 니 다.더 좋 은 시간 과 날 짜 를 얻 기 위해 date 처럼 출력 할 수 있 습 니 다. asctime 또는 ctime 함수, 원형: char *ctime(const time_t  *timeval);테스트 코드 는 다음 과 같 습 니 다:
 
 1 #include <time.h>

 2 #include <stdio.h>

 3 #include <stdlib.h>

 4 int main()

 5 {

 6     time_t the_time;

 7     time(&the_time);

 8     printf("The date is : %s /n" , ctime(&the_time));

 9     exit(0);

10 }

 
3. 높 은 정밀도 의 시간 을 얻 으 려 면 사용 할 수 있 습 니 다.
       BOOL Query PerformanceFrequency (LARGE INTEGER * lpFrequency) 시스템 의 카운터 주파수 가 져 오기
       BOOL Query PerformanceCounter (LARGE INTEGER * lpPerformanceCount) 계수기 값 가 져 오기
       그리고 두 번 의 카운터 차 를 Frequency 로 나 누 면 시간 을 얻 을 수 있 습 니 다.
테스트 프로그램 은 다음 과 같 습 니 다.
 
 1 #include <iostream>

 2 #include <windows.h>

 3 using namespace std;

 4 int main()

 5 {

 6     LARGE_INTEGER m_nFreq;

 7     LARGE_INTEGER m_nBeginTime;

 8     LARGE_INTEGER nEndTime;

 9     QueryPerformanceFrequency(&m_nFreq); //       

10     QueryPerformanceCounter(&m_nBeginTime); //       

11     Sleep(100);

12     QueryPerformanceCounter(&nEndTime);

13     cout << (double)(nEndTime.QuadPart-m_nBeginTime.QuadPart)*1000/m_nFreq.QuadPart << endl;

14 }

 
주의해 야 할 것 은 결과 가 double 로 강제로 전환 되 어야 한 다 는 것 입 니 다. 그렇지 않 으 면 다음 과 같은 오 류 를 얻 을 수 있 습 니 다. < is ambiguous.
4、timeGetTime()。
     정밀도: 밀리초, GetTickCount () 와 비슷 합 니 다.windows. h 를 포함 하고 Winmm. lib 를 추가 해 야 합 니 다.테스트 코드 는 다음 과 같 습 니 다:
 
#include <iostream>

#include <windows.h>//GetTickCount

//#include <mmsystem.h>

using namespace std;

int main()

{

    DWORD  start = timeGetTime();//

    Sleep(1000);

    DWORD  end= timeGetTime();//

    cout <<  timeGetTime() << endl;

    return 0;

}

 5. MFC 에서 CTime: GetCurrentTime () 은 초 까지 정확 하고 테스트 코드 를 표시 하지 않 습 니 다.
타이머 따 위 는 현재 사용 할 곳 이 많 지 않 으 니 정리 하지 않 겠 습 니 다.
 
참조 사이트 주소:
1、http://blog.csdn.net/wallaceli1981/archive/2009/10/24/4723218.aspx 
2、http://wenku.baidu.com/view/beb3c9eef8c75fbfc77db2b5.html

좋은 웹페이지 즐겨찾기