1926f5ddfSshatty #ifndef __GENERIC_THREAD_H__ 2926f5ddfSshatty #define __GENERIC_THREAD_H__ 3926f5ddfSshatty 4*3f4b183dSJonas Sundström 5926f5ddfSshatty #include <Message.h> 6926f5ddfSshatty 7*3f4b183dSJonas Sundström 8926f5ddfSshatty class GenericThread 9926f5ddfSshatty { 10926f5ddfSshatty public: 11*3f4b183dSJonas Sundström GenericThread(const char* 12*3f4b183dSJonas Sundström thread_name = "generic_thread", 13*3f4b183dSJonas Sundström int32 priority = B_NORMAL_PRIORITY, 14*3f4b183dSJonas Sundström BMessage* message = NULL); 15*3f4b183dSJonas Sundström virtual ~GenericThread(); 16926f5ddfSshatty 17*3f4b183dSJonas Sundström BMessage* GetDataStore(); 18*3f4b183dSJonas Sundström void SetDataStore(BMessage* message); 19926f5ddfSshatty 20*3f4b183dSJonas Sundström status_t Start(); 21*3f4b183dSJonas Sundström status_t Pause(bool doBlock = TRUE, bigtime_t timeout = 0); 22*3f4b183dSJonas Sundström void Quit(); 23*3f4b183dSJonas Sundström bool IsPaused(); 24*3f4b183dSJonas Sundström bool HasQuitBeenRequested(); 25926f5ddfSshatty 26*3f4b183dSJonas Sundström status_t Suspend(); 27*3f4b183dSJonas Sundström status_t Resume(); 28*3f4b183dSJonas Sundström status_t Kill(); 29926f5ddfSshatty 30*3f4b183dSJonas Sundström void ExitWithReturnValue(status_t returnValue); 31*3f4b183dSJonas Sundström status_t SetExitCallback(void (*callback)(void*), 32*3f4b183dSJonas Sundström void* data); 33*3f4b183dSJonas Sundström status_t WaitForThread(status_t* exitValue); 34926f5ddfSshatty 35*3f4b183dSJonas Sundström status_t Rename(char* name); 36926f5ddfSshatty 37*3f4b183dSJonas Sundström status_t SendData(int32 code, void* buffer, 38*3f4b183dSJonas Sundström size_t bufferSize); 39*3f4b183dSJonas Sundström int32 ReceiveData(thread_id* sender, void* buffer, 40*3f4b183dSJonas Sundström size_t bufferSize); 41*3f4b183dSJonas Sundström bool HasData(); 42926f5ddfSshatty 43*3f4b183dSJonas Sundström status_t SetPriority(int32 newPriority); 44926f5ddfSshatty 45*3f4b183dSJonas Sundström void Snooze(bigtime_t microseconds); 46*3f4b183dSJonas Sundström void SnoozeUntil(bigtime_t microseconds, 47*3f4b183dSJonas Sundström int timebase = B_SYSTEM_TIMEBASE); 48926f5ddfSshatty 49*3f4b183dSJonas Sundström status_t GetInfo(thread_info* threadInfo); 50*3f4b183dSJonas Sundström thread_id GetThread(); 51*3f4b183dSJonas Sundström team_id GetTeam(); 52*3f4b183dSJonas Sundström char* GetName(); 53*3f4b183dSJonas Sundström thread_state GetState(); 54*3f4b183dSJonas Sundström sem_id GetSemaphore(); 55*3f4b183dSJonas Sundström int32 GetPriority(); 56*3f4b183dSJonas Sundström bigtime_t GetUserTime(); 57*3f4b183dSJonas Sundström bigtime_t GetKernelTime(); 58*3f4b183dSJonas Sundström void* GetStackBase(); 59*3f4b183dSJonas Sundström void* GetStackEnd(); 60926f5ddfSshatty 61926f5ddfSshatty protected: 62*3f4b183dSJonas Sundström virtual status_t ThreadFunction(); 63*3f4b183dSJonas Sundström virtual status_t ThreadStartup(); 64*3f4b183dSJonas Sundström virtual status_t ExecuteUnit(); 65*3f4b183dSJonas Sundström virtual status_t ThreadShutdown(); 66926f5ddfSshatty 67*3f4b183dSJonas Sundström virtual void ThreadStartupFailed(status_t status); 68*3f4b183dSJonas Sundström virtual void ExecuteUnitFailed(status_t status); 69*3f4b183dSJonas Sundström virtual void ThreadShutdownFailed(status_t status); 70926f5ddfSshatty 71*3f4b183dSJonas Sundström void BeginUnit(); 72*3f4b183dSJonas Sundström void EndUnit(); 73926f5ddfSshatty 74*3f4b183dSJonas Sundström BMessage* fThreadDataStore; 75926f5ddfSshatty 76926f5ddfSshatty private: 77*3f4b183dSJonas Sundström static status_t _ThreadFunction(void* simpleThreadPtr); 78926f5ddfSshatty 79*3f4b183dSJonas Sundström thread_id fThreadId; 80*3f4b183dSJonas Sundström sem_id fExecuteUnitSem; 81*3f4b183dSJonas Sundström bool fQuitRequested; 82*3f4b183dSJonas Sundström bool fThreadIsPaused; 83926f5ddfSshatty 84926f5ddfSshatty }; 85926f5ddfSshatty 86*3f4b183dSJonas Sundström #endif // __GENERIC_THREAD_H__ 87*3f4b183dSJonas Sundström 88