xref: /haiku/src/add-ons/tracker/zipomatic/GenericThread.h (revision 6e645865304e06c60123df84c048753a2c35ee17)
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