home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / Sessions / Completions / Completions Source / Execution Queues / ApplicationTaskQueue.cp next >
Encoding:
Text File  |  1998-06-17  |  1.1 KB  |  58 lines  |  [TEXT/CWIE]

  1. // ApplicationTaskQueue.cp
  2.  
  3. #ifndef ApplicationTaskQueue_h
  4. #include "ApplicationTaskQueue.h"
  5. #endif
  6. #ifndef ApplicationWaker_h
  7. #include "ApplicationWaker.h"
  8. #endif
  9. #ifndef ConfigureDeferredTaskFaking_h
  10. #include "ConfigureDeferredTaskFaking.h"
  11. #endif
  12. #ifndef FakeDeferredTaskQueue_h
  13. #include "FakeDeferredTaskQueue.h"
  14. #endif
  15.  
  16. ApplicationTaskQueue::ApplicationTaskQueue()
  17.   : waker( ApplicationWaker::The() )
  18.   {
  19.     Assert( ApplicationTime::IsNow() );
  20.   }
  21.  
  22. ApplicationTaskQueue& ApplicationTaskQueue::The()
  23.   {
  24.     static ApplicationTaskQueue the;
  25.     return the;
  26.   }
  27.  
  28. bool ApplicationTaskQueue::IsEmpty() const
  29.   {
  30.     if ( useFakeDeferredTasks )
  31.          return queue.IsEmpty() && FakeDeferredTaskQueue::The().IsEmpty();
  32.  
  33.     return queue.IsEmpty();
  34.   }
  35.  
  36. void ApplicationTaskQueue::Put( Link& link )
  37.   {
  38.     queue.Put( link );
  39.     if ( !ApplicationTime::IsNow() )
  40.         waker.StartAlarm();
  41.   }
  42.  
  43. void ApplicationTaskQueue::ExecuteOne()
  44.   {
  45.     ApplicationTime time;
  46.     waker.StopAlarm();
  47.  
  48.     if ( useFakeDeferredTasks )
  49.         FakeDeferredTaskQueue::The().ExecuteAll();
  50.  
  51.     ApplicationTimeProcedure *procedure = queue.Get();
  52.     
  53.     if ( procedure == 0 )
  54.             return;
  55.         
  56.     (*procedure)( time );
  57.   }
  58.