Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Знатоки подскажите-Как реализовать таймер


Автор: Modest 21.2.2007, 17:33
                                                              Знатоки подскажите
                                                          Как реализовать таймер?
Например: В начале определенного действия,наглядно начинается отсчет времени
а по оканчанию этого действия - останавливается и показывается сколько времени занял
этот процесс .
                                                                                          Заранее всем очень благодарен!
 smile 

Автор: _hunter 21.2.2007, 17:41
береш простой таймер; в начале определенного действия запускаеш его; в обработчике таймера наглядно показываеш пройденное время; в по окончанию определенного действия -- останавливаеш таймер.

P.S.
не помешало бы платформу/среду разработки указать...

Автор: skeletor 21.2.2007, 18:41
gettime() - должна помочь.

Автор: Modest 21.2.2007, 20:42
     А можно вас попросить привести небольшой пример ,как это реализуется  в исходнике.
     Очень нужно. Плиз!
                                                                                                                              

Автор: threef 21.2.2007, 21:22
Код

#include <windows.h>
#include <iostream>
#include <io.h>
using std::cout;

main()
{
    SYSTEMTIME st,fn;
    GetSystemTime(&st);
// чем-то занять время
    _finddata_t FD;
    unsigned mask,flag=0;
    mask=_findfirst("d:\\windows\\system32\\*.*",&FD);
    while(!flag)
    {
        flag=_findnext(mask,&FD);
        cout<<FD.name<<'\n';
    }
    _findclose(mask);
// окончание какого-то действия
    GetSystemTime(&fn);
    cout<<"Start - stop="<<(fn.wMilliseconds-st.wMilliseconds)+1000*(fn.wSecond-st.wSecond)<<'\n';

}

Осталось только посмотреть структурку SYSTEMTIME, чтобы знать, как считать разницу во времени.

Автор: WERITAS 21.2.2007, 21:55
Вот тебе еще такой таймер:

TimeCounter.h 
Код

#ifndef __TIMECOUNTER222__H__ 
#define __TIMECOUNTER222__H__ 
#include <iostream> 
class TimeCounter 
{ 
friend std::ostream& operator<<(std::ostream& out, TimeCounter& cntr); 
public: 

   TimeCounter() {started=false; stopped=false;} 
   void Start(); 
   void Start(int nPriority); 
   void Stop(); 
   double timeElapsed() const; 
   bool getStarted() const {return started;} 
   bool getStopped() const {return stopped;} 
   int getNewPriority() const {return new_priority;} 
   ~TimeCounter(); 

protected: 

   int new_priority; 
   int old_priority; 
   bool started; 
   bool stopped; 
   double tBefore, tAfter, i64PerfFrequency; 
    double tWord; 
}; 
#endif 


TimeCounter.cpp
Код

#include "stdafx.h" 
#include "TimeCounter.h" 
#include <windows.h> 

void TimeCounter::Start() 
{ 
   started=true; 
   stopped=false; 
   new_priority=0; 

   LARGE_INTEGER pf; 
    QueryPerformanceFrequency(&pf); 
   i64PerfFrequency = pf.QuadPart; 
    Sleep(0); 
    QueryPerformanceCounter(&pf); 
   tBefore = pf.QuadPart; 
} 

void TimeCounter::Start(int nPriority) 
{ 
   started=true; 
   stopped=false; 
   new_priority=nPriority; 
   old_priority=GetThreadPriority(GetCurrentThread()); 
   SetThreadPriority(GetCurrentThread(),new_priority); 

   LARGE_INTEGER pf; 
    QueryPerformanceFrequency(&pf); 
   i64PerfFrequency = pf.QuadPart; 
    Sleep(0); 
   QueryPerformanceCounter(&pf); 
   tBefore = pf.QuadPart; 
} 

void TimeCounter::Stop() 
{ 
   LARGE_INTEGER tAfter1; 
   QueryPerformanceCounter(&tAfter1); 
   tAfter = tAfter1.QuadPart; 

   tWord = tAfter - tBefore; 
   tWord /= i64PerfFrequency; 
   if (new_priority) 
      SetThreadPriority(GetCurrentThread(),old_priority); 
   started=false; 
   stopped=true; 
} 
    
double TimeCounter::timeElapsed() const 
{ 
   LARGE_INTEGER tempAfter; 
   double tempWord; 

   if (started) 
   { 
      QueryPerformanceCounter(&tempAfter); 
      tempWord = tempAfter.QuadPart - tBefore; 
      tempWord /= i64PerfFrequency; 

      return tempWord; 
   } 
   if (stopped) 
      return tWord; 
    
   return 0.; 
} 

TimeCounter::~TimeCounter() 
{ 
   if (new_priority) 
      SetThreadPriority(GetCurrentThread(),old_priority); 
} 

std::ostream& operator<<(std::ostream& out, TimeCounter& cntr) 
{ 
   double fsec = cntr.timeElapsed(); 
   int hour = int(fsec/3600.); 
   double fmin = fsec-3600.*double(hour); 
   int min = int(fmin/60.); 
   double sec = fmin-60.*double(min); 
   out<<"Time elapsed: "<<hour<<" h. "<<min<<" min. "<<sec<<" sec."<<std::endl; 
   return out; 
}


пример работы:
Код

Код: 
TimeCounter timer; 
timer.Start(); 
................... 
timer.Stop(); 
std::cout << timer;  


 smile 

Автор: Rockie 21.2.2007, 22:22
http://forum.vingrad.ru/topic-101369/hl/something/index.html

Автор: Modest 22.2.2007, 04:49
              Огромное все спасибо !
          Вы меня очень выручили! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)