home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / threads.zip / sample / counter.cpv next >
Text File  |  1996-02-27  |  2KB  |  87 lines

  1.  
  2.  
  3. // Feature source code generation begins here...
  4. INotificationId Counter::startNumberId = "Counter::startNumber";
  5. INotificationId Counter::endNumberId = "Counter::endNumber";
  6. INotificationId Counter::currentNumberId = "Counter::currentNumber";
  7.  
  8. unsigned long Counter::startNumber() const
  9. {
  10.   return iStartNumber;
  11. }
  12.  
  13. Counter& Counter::setStartNumber(unsigned long aStartNumber)
  14. {
  15.   if (!(iStartNumber == aStartNumber))
  16.   {
  17.     iStartNumber = aStartNumber;
  18.     notifyObservers(INotificationEvent(Counter::startNumberId, *this));
  19.   } // endif
  20.   return *this;
  21. }
  22.  
  23. unsigned long Counter::endNumber() const
  24. {
  25.   return iEndNumber;
  26. }
  27.  
  28. Counter& Counter::setEndNumber(unsigned long aEndNumber)
  29. {
  30.   if (!(iEndNumber == aEndNumber))
  31.   {
  32.     iEndNumber = aEndNumber;
  33.     notifyObservers(INotificationEvent(Counter::endNumberId, *this));
  34.   } // endif
  35.   return *this;
  36. }
  37.  
  38. unsigned long Counter::currentNumber() const
  39. {
  40.   return iCurrentNumber;
  41. }
  42.  
  43. Counter& Counter::setCurrentNumber(unsigned long aCurrentNumber)
  44. {
  45.   if (!(iCurrentNumber == aCurrentNumber))
  46.   {
  47.     iCurrentNumber = aCurrentNumber;
  48.     notifyObservers(INotificationEvent(Counter::currentNumberId, *this));
  49.   } // endif
  50.   return *this;
  51. }
  52.  
  53. void Counter::startCounting()
  54. {
  55.   iThread =
  56.     new IThread(new IThreadMemberFn<Counter>(*this, Counter::runThread), true);
  57. }
  58.  
  59. void Counter::runThread()
  60. {
  61.   for (setCurrentNumber(startNumber());
  62.        true;   // loop forever
  63.        setCurrentNumber(currentNumber() + 1) )
  64.     {
  65.     IThread::current().sleep(1000);
  66.     if (currentNumber() >= endNumber())
  67.       setCurrentNumber(startNumber());
  68.     }
  69. }
  70.  
  71. void Counter::reset()
  72. {
  73.   setCurrentNumber(startNumber());
  74. }
  75.  
  76. void Counter::initialize()
  77. {
  78.   iThread = 0;
  79. }
  80.  
  81. void Counter::terminate()
  82. {
  83.    if (iThread)
  84.       iThread->stop();
  85. }
  86. // Feature source code generation ends here.
  87.