TimeQueue.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef TimeQueue_H
  14. #define TimeQueue_H
  15. #include <kernel_types.h>
  16. #include "Prio.hpp"
  17. #define MAX_NO_OF_SHORT_TQ 512
  18. #define MAX_NO_OF_LONG_TQ 512
  19. #define MAX_NO_OF_TQ (MAX_NO_OF_SHORT_TQ + MAX_NO_OF_LONG_TQ)
  20. #define NULL_TQ_ENTRY 65535
  21. class Signal;
  22. struct TimeStruct
  23. {
  24.   Uint16 delay_time;
  25.   Uint16 job_index;
  26. };
  27. union TimerEntry
  28. {
  29.   struct TimeStruct time_struct;
  30.   Uint32 copy_struct;
  31. };
  32. class TimeQueue
  33. {
  34. public:
  35.   TimeQueue();
  36.   ~TimeQueue();
  37.   void   insert(Signal* signal, BlockNumber bnr,
  38. GlobalSignalNumber gsn, Uint32 delayTime);
  39.   void   clear();
  40.   void   scanTable(); // Called once per millisecond
  41.   Uint32 getIndex();
  42.   void   releaseIndex(Uint32 aIndex);
  43.   void   recount_timers();
  44.   
  45. private:
  46.   TimerEntry  theShortQueue[MAX_NO_OF_SHORT_TQ];
  47.   TimerEntry  theLongQueue[MAX_NO_OF_LONG_TQ];
  48.   Uint16     theFreeIndex[MAX_NO_OF_TQ];
  49. };
  50. #endif