xref: /haiku/src/add-ons/tracker/zipomatic/GenericThread.h (revision f2ced752a08ff5d2618826bcd3ae3976c9f3e92e)
1 #ifndef __GENERIC_THREAD_H__
2 #define __GENERIC_THREAD_H__
3 
4 #include <OS.h>
5 #include <Message.h>
6 
7 class GenericThread
8 {
9 	public:
10 				GenericThread	(const char * a_thread_name = "generic_thread", int32 a_priority = B_NORMAL_PRIORITY, BMessage * a_message = NULL);
11 		virtual	~GenericThread	(void);
12 
13 				BMessage *	GetDataStore		(void);
14 				void		SetDataStore		(BMessage * a_message);
15 
16 				status_t	Start					(void);
17 				status_t	Pause					(bool a_do_block = TRUE, bigtime_t a_timeout = 0);
18 				void		Quit					(void);
19 				bool		IsPaused				(void);
20 				bool		HasQuitBeenRequested	(void);
21 
22 				status_t	Suspend				(void);
23 				status_t	Resume				(void);
24 				status_t	Kill				(void);
25 
26 				void		ExitWithReturnValue	(status_t a_return_value);
27 				status_t	SetExitCallback		(void (* a_callback)(void *), void * a_data);
28 				status_t	WaitForThread		(status_t * a_exit_value);
29 
30 				status_t	Rename			(char * a_name);
31 
32 				status_t	SendData		(int32 a_code, void * a_buffer, size_t a_buffer_size);
33 				int32		ReceiveData		(thread_id * a_sender, void * a_buffer, size_t a_buffer_size);
34 				bool		HasData			(void);
35 
36 				status_t	SetPriority		(int32 a_new_priority);
37 
38 				void		Snooze			(bigtime_t a_microseconds);
39 				void		SnoozeUntil		(bigtime_t a_microseconds, int a_timebase = B_SYSTEM_TIMEBASE);
40 
41 
42 				status_t		GetInfo			(thread_info * a_thread_info);
43 				thread_id		GetThread		(void);
44 				team_id			GetTeam			(void);
45 				char	*		GetName			(void);
46 				thread_state	GetState		(void);
47 				sem_id			GetSemaphore	(void);
48 				int32			GetPriority		(void);
49 				bigtime_t		GetUserTime		(void);
50 				bigtime_t		GetKernelTime	(void);
51 				void	*		GetStackBase	(void);
52 				void	*		GetStackEnd		(void);
53 
54 	protected:
55 
56 		virtual status_t	ThreadFunction		(void);
57 		virtual status_t    ThreadStartup		(void);
58 		virtual status_t	ExecuteUnit			(void);
59 		virtual status_t	ThreadShutdown		(void);
60 
61 		virtual void		ThreadStartupFailed		(status_t a_status);
62 		virtual void		ExecuteUnitFailed		(status_t a_status);
63 		virtual void		ThreadShutdownFailed	(status_t a_status);
64 
65 				void		BeginUnit			(void);	// acquire m_execute_cycle
66 		 		void		EndUnit				(void);	// release m_execute_cycle
67 
68 		BMessage	 *		m_thread_data_store;
69 
70 	private:
71 
72 		static status_t	private_thread_function		(void * a_simple_thread_ptr);
73 
74 		thread_id		m_thread_id;
75 
76 		sem_id			m_execute_unit;	// acq./relase within tread_function.. For Pause()
77 
78 		bool			m_quit_requested;
79 		bool			m_thread_is_paused;
80 
81 };
82 
83 #endif
84