gxtimer.cpp 657 B

12345678910111213141516171819202122232425262728293031
  1. #include "std.h"
  2. #include "gxtimer.h"
  3. #include "gxruntime.h"
  4. gxTimer::gxTimer( gxRuntime *rt,int hertz ):
  5. runtime(rt),ticks_get(0),ticks_put(0){
  6. event=CreateEvent( 0,false,false,0 );
  7. timerID=timeSetEvent( 1000/hertz,0,timerCallback,(DWORD)this,TIME_PERIODIC );
  8. }
  9. gxTimer::~gxTimer(){
  10. timeKillEvent( timerID );
  11. CloseHandle( event );
  12. }
  13. void CALLBACK gxTimer::timerCallback( UINT id,UINT msg,DWORD user,DWORD dw1,DWORD dw2 ){
  14. gxTimer *t=(gxTimer*)user;
  15. ++t->ticks_put;
  16. SetEvent( t->event );
  17. }
  18. int gxTimer::wait(){
  19. for(;;){
  20. if( WaitForSingleObject( event,1000 )==WAIT_OBJECT_0 ) break;
  21. }
  22. int n=ticks_put-ticks_get;
  23. ticks_get+=n;
  24. return n;
  25. }