Copyright (c) 2013-2018 brinkqiang (brink.qiang@gmail.com)
[Linux][lin-link] | [Mac][mac-link] | [Windows][win-link] |
---|---|---|
![lin-badge] | ![mac-badge] | ![win-badge] |
[lin-badge]: https://github.com/brinkqiang/dmtimer/workflows/linux/badge.svg «linux build status» [lin-link]: https://github.com/brinkqiang/dmtimer/actions/workflows/linux.yml «linux build status» [mac-badge]: https://github.com/brinkqiang/dmtimer/workflows/mac/badge.svg «mac build status» [mac-link]: https://github.com/brinkqiang/dmtimer/actions/workflows/mac.yml «mac build status» [win-badge]: https://github.com/brinkqiang/dmtimer/workflows/win/badge.svg «win build status» [win-link]: https://github.com/brinkqiang/dmtimer/actions/workflows/win.yml «win build status»
C++ high performance timer
#include "dmutil.h"
#include "dmtimermodule.h"
#include "dmsingleton.h"
#include "dmthread.h"
#include "dmconsole.h"
#include "dmtypes.h"
class CPlayer : public CDMTimerNode {
public:
virtual void OnTimer( uint64_t qwIDEvent );
};
class CMain :
public IDMConsoleSink,
public IDMThread,
public CDMThreadCtrl,
public CDMTimerNode,
public TSingleton<CMain> {
friend class TSingleton<CMain>;
enum {
eMAX_PLAYER = 100 * 10000,
eMAX_PLAYER_EVENT = 10,
};
typedef enum {
eTimerID_UUID = 0,
eTimerID_STOP,
} ETimerID;
typedef enum {
eTimerTime_UUID = 1000,
eTimerTime_STOP = 10000,
} ETimerTime;
public:
virtual void ThrdProc() {
std::cout << "test start" << std::endl;
for ( int i = 0; i < eMAX_PLAYER; ++i ) {
for ( int j = 1; j <= eMAX_PLAYER_EVENT; ++j ) {
m_oPlayers[i].SetTimer( j, 500 );
}
}
SetTimer( eTimerID_UUID, eTimerTime_UUID,
dm::any( std::string( "hello world" ) ) );
SleepMs( 300 );
CDMTimerModule::Instance()->Run();
SetTimer(eTimerID_STOP, eTimerTime_STOP);
// test interface
uint64_t qwElapse = GetTimerElapse( eTimerID_UUID );
std::cout << "test GetTimerElapse: " << qwElapse << std::endl;
uint64_t qwRemain = GetTimerRemain( eTimerID_UUID );
std::cout << "test GetTimerRemain: " << qwRemain << std::endl;
CDMTimerElement* poElement = GetTimerElement( eTimerID_UUID );
bool bBusy = false;
while ( !m_bStop ) {
bBusy = false;
if ( CDMTimerModule::Instance()->Run() ) {
bBusy = true;
}
if ( __Run() ) {
bBusy = true;
}
if ( !bBusy ) {
SleepMs( 1 );
}
}
std::cout << "test stop" << std::endl;
}
virtual void Terminate() {
m_bStop = true;
}
virtual void OnCloseEvent() {
Stop();
}
virtual void OnTimer( uint64_t qwIDEvent, dm::any& oAny ) {
switch ( qwIDEvent ) {
case eTimerID_UUID: {
std::cout << DMFormatDateTime() << " " << CMain::Instance()->GetOnTimerCount()
<< " " << dm::any_cast<std::string>( oAny ) << std::endl;
}
break;
Здесь представлен перевод исходного текста на русский язык. **API test**
Запускаем main() из gtest_main.cc [==========] Запуск 7 тестов из 7 тестовых случаев. [----------] Настройка глобальной среды тестирования. [----------] 1 тест из clock_realtime_coarse [ RUN ] clock_realtime_coarse.clock_realtime_coarse 185306418897129146 [ OK ] clock_realtime_coarse.clock_realtime_coarse (625 мс) [----------] 1 тест из clock_realtime_coarse (всего 630 мс)
[----------] 1 тест из clock_realtime [ RUN ] clock_realtime.clock_realtime 185306526911819519 [ OK ] clock_realtime.clock_realtime (1609 мс) [----------] 1 тест из clock_realtime (всего 1609 мс)
[----------] 1 тест из clock_monotonic [ RUN ] clock_monotonic.clock_monotonic 253981295601526960 [ OK ] clock_monotonic.clock_monotonic (1608 мс) [----------] 1 тест из clock_monotonic (всего 1608 мс)
[----------] 1 тест из gettimeofday [ RUN ] gettimeofday.gettimeofday 185306852249981606 [ OK ] gettimeofday.gettimeofday (1681 мс) [----------] 1 тест из gettimeofday (всего 1681 мс)
[----------] 1 тест из chrono_system_clock [ RUN ] chrono_system_clock.chrono_system_clock 185308930355752908 [ OK ] chrono_system_clock.chrono_system_clock (39878 мс) [----------] 1 тест из chrono_system_clock (всего 39878 мс)
[----------] 1 тест из chrono_steady_clock [ RUN ] chrono_steady_clock.chrono_steady_clock 253987528206487313 [ OK ] chrono_steady_clock.chrono_steady_clock (39935 мс) [----------] 1 тест из chrono_steady_clock (всего 39935 мс)
[----------] 1 тест из high_resolution_clock [ RUN ] high_resolution_clock.high_resolution_clock 185316910674516278 [ OK ] high_resolution_clock.high_resolution_clock (39863 мс) [----------] 1 тест из high_resolution_clock (всего 39863 мс)
[----------] Очистка глобальной тестовой среды [==========] Запущено 7 тестов из 7 тестовых случаев (всего 125204 мс) [ PASSED ] 7 тестов.
**Контакты**
**Спасибо**
pudding_186@163.com
will@i007.cc
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )