home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / kaffe-0.5p4-src.tgz / tar.out / contrib / kaffe / kaffevm / thread.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  2KB  |  104 lines

  1. /*
  2.  * thread.h
  3.  * Thread support.
  4.  *
  5.  * Copyright (c) 1996 Systems Architecture Research Centre,
  6.  *           City University, London, UK.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  12.  */
  13.  
  14. #ifndef __thread_h
  15. #define __thread_h
  16.  
  17. #define    THREADCLASS        "java/lang/Thread"
  18.  
  19. #define    MIN_THREAD_PRIO        1
  20. #define    NORM_THREAD_PRIO    5
  21. #define    MAX_THREAD_PRIO        10
  22.  
  23. #define    THREAD_SUSPENDED    0
  24. #define    THREAD_RUNNING        1
  25. #define    THREAD_DEAD        2
  26.  
  27. #define    THREAD_FLAGS_GENERAL        0
  28. #define    THREAD_FLAGS_NOSTACKALLOC    1
  29.  
  30. struct _thread;
  31.  
  32. typedef struct _ctx {
  33.     uint8            status;
  34.     uint8            priority;
  35.     uint8*            restorePoint;
  36.     uint8*            stackBase;
  37.     uint8*            stackEnd;
  38.     int64            time;
  39.     struct _thread*        nextlive;
  40.     uint8            flags;
  41. #if defined(INTERPRETER)
  42.     void*            exceptPtr;
  43. #endif
  44. } ctx;
  45.  
  46. struct _stringClass;
  47. struct _object;
  48.  
  49. /* This structure mirrors java.lang.ThreadGroup.h */
  50. typedef struct _threadGroup {
  51.     object            obj;
  52.     struct _threadGroup*    parent;
  53.     struct _object*        name;
  54.     long            maxPrio;
  55.     long            destroyed;
  56.     long            daemon;
  57.     long            nthreads;
  58.     struct _object*        threads;
  59.     long            ngroups;
  60.     struct _object*        groups;
  61. } threadGroup;
  62.  
  63. /* This structure mirrors java.lang.Thread.h */
  64. typedef struct _thread {
  65.     object            obj;
  66.     object*            name;
  67.     long            priority;
  68.     struct _thread*        next;
  69.     ctx*            PrivateInfo;
  70.     void*            eetop;
  71.     long            single_step;
  72.     long            daemon;
  73.     long            stillborn;
  74.     object*            target;
  75.     long            interruptRequested;
  76.     threadGroup*        group;
  77. } thread;
  78.  
  79. void initThreads(void);
  80. void startThread(thread*);
  81. void resumeThread(thread*);
  82. void suspendThread(thread*);
  83. void suspendOnQThread(thread*, thread**);
  84. void yieldThread(void);
  85. void killThread(thread*);
  86. void setPriorityThread(thread*, int);
  87.  
  88. void sleepThread(jlong);
  89. bool aliveThread(thread*);
  90. long framesThread(thread*);
  91.  
  92. void reschedule(void);
  93.  
  94. extern int blockInts;
  95. extern bool needReschedule;
  96.  
  97. #define    intsDisable()    blockInts++
  98. #define    intsRestore()    if (blockInts == 1 && needReschedule == true) {    \
  99.                 reschedule();                \
  100.             }                        \
  101.             blockInts--
  102.  
  103. #endif
  104.