int GetTickCount( | ) |
Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. Счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней.
Совместо с TimeLocal() вполне возможно написать функцию возвращающую местное время с тысячными.
int GetTickCount( | ) |
Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. Счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней.
Совместо с TimeLocal() вполне возможно написать функцию возвращающую местное время с тысячными.
Это очень хорошо, что есть такая функция int GetTickCount( ). Еще бы пример использования...
double fGetPrecisionTimeLocal(){ static int TimePrev=-1; static int TickPrev=0; int TickNow=GetTickCount(); if(TimePrev!=-1){ if(TickNow<TickPrev){ // новая эпока GetTickCount() TimePrev=-1; // будем инициализировать заново } } if(TimePrev==-1){ // инициализация TimePrev=TimeLocal(); while(true){ int TimeNow=TimeLocal(); TickNow=GetTickCount(); if(TimeNow!=TimePrev){ TimePrev=TimeNow; TickPrev=TickNow; break; } TimePrev=TimeLocal(); TickPrev=GetTickCount(); } } // время TickNow=GetTickCount(); int tmp=TickNow-TickPrev; return(TimePrev+0.001*tmp); }Только мне не очень нравится переинициализация с началом новой эпохи GetTickCount(). Может кто предложит более изящный метод?
Только мне не очень нравится переинициализация с началом новой эпохи GetTickCount(). Может кто предложит более изящный метод?
можно предложить лишь для профилирования времени выполнения программы - куска програмы
использовать что то другое
например свою функцию из DLL
Еще можно к каким-нибудь часам ядреным законнектится. Я имел ввиду небольшие вычисления, если значение GetTickCount() имеет меньшее значение чем при предыдущем вызове, что означает переход на следующий круг. Это не сложно, надо подумать немного, а не хочется:)
Еще можно к каким-нибудь часам ядреным законнектится. Я имел ввиду небольшие вычисления, если значение GetTickCount() имеет меньшее значение чем при предыдущем вызове, что означает переход на следующий круг. Это не сложно, надо подумать немного, а не хочется:)
я это понял... потому и предложил внешнюю
у меня есть код на Си++
найду выложу
/* вычисление времени исполнения процедуры */ #include "stdafx.h" #include <stdlib.h> // --- получение частоты процессора #if !defined _TIMER_H_ #define _TIMER_H_ inline unsigned __int64 GetCycleCount(void) { _asm _emit 0x0F _asm _emit 0x31 } class KTimer { unsigned __int64 m_startcycle; public: unsigned __int64 m_overhead; KTimer() { m_overhead = 0; Start(); m_overhead = Stop(); } void Start(void) { m_startcycle = GetCycleCount(); } unsigned __int64 Stop(void) { return GetCycleCount() - m_startcycle - m_overhead; } }; #endif //----------------------------------------------------------------------------------- int main(int argc, char* argv[]) { printf("YURAZ This profiler Time !\n"); ///--- вычислим скорось работы процессора KTimer timer; unsigned cpuspeed10; unsigned __int64 speed; // правда упираемся в 64 бита timer.Start(); _sleep(1000); cpuspeed10 = (unsigned)(timer.Stop()/100000); // получим скорость процессора printf("\nCPU speed %d.%02d mhz\r\n", cpuspeed10/10, cpuspeed10 % 10); ///--- //--- timer.Start(); _sleep(100); speed = timer.Stop(); printf( "\n SpeedTech %d", speed ); timer.Start(); _sleep(10); speed = timer.Stop(); printf( "\n SpeedTech %d", speed ); timer.Start(); _sleep(1); speed = timer.Stop(); printf( "\n SpeedTech %d", speed ); //--- timer.Start(); _sleep(1000); speed = (timer.Stop()); printf( "\n SpeedTech %d", speed/cpuspeed10 ); timer.Start(); _sleep(100); speed = timer.Stop(); printf( "\n SpeedTech %d", speed /cpuspeed10 ); timer.Start(); _sleep(10); speed = timer.Stop(); printf( "\n SpeedTech %d", speed /cpuspeed10 ); ///---- return 0; }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Как известно данные функции могут возвращать время в секундах.
А как измерить десятые, или даже сотые доли секунд?