summaryrefslogblamecommitdiff
path: root/src/common/thread.h
blob: 887c0317914da53df4d21d3d7b26f8586460656c (plain) (tree)
1
2
3
4
5
6
7
8
9


                                                                           

                         



                                  
                                     

                            


                         







                                                                                                    
   

                              
                                                                  

 
    



                                                                                                   
                                        



                                                        
                                                                                                          




                                       
                                                                     


                                     
                                          

 
    
                                                                
   
                                               

                                                                                              

                              
                          


   
                              
  

                                                                                






                                        
                                           


                                                                                                           
   

                                                          
                                                            

 
    
                                              
   


                                                
                                                              

 
    



                                                  
                                                  



                                                                      
   
                                           

                                                                          








                      
                              
// Copyright (c) rAthena Project (www.rathena.org) - Licensed under GNU GPL
// For more information, see LICENCE in the main folder

#ifndef _COMMON_THREAD_H_
#define _COMMON_THREAD_H_

#include "../common/cbasetypes.h"

typedef struct rAthread *rAthread;
typedef void* (*rAthreadProc)(void*);

typedef enum RATHREAD_PRIO {
	RAT_PRIO_LOW = 0,
	RAT_PRIO_NORMAL,
	RAT_PRIO_HIGH	
} RATHREAD_PRIO;


/**
 * Creates a new Thread
 *
 * @param entyPoint  - entryProc,
 * @param param - general purpose parameter, would be given as parameter to the thread's entrypoint.
 * 
 * @return not NULL if success
 */
rAthread rathread_create( rAthreadProc entryPoint,  void *param );


/** 
 * Creates a new Thread (with more creation options)
 *
 * @param entyPoint  - entryProc,
 * @param param - general purpose parameter, would be given as parameter to the thread's entrypoint
 * @param szStack - stack Size in bytes 
 * @param prio - Priority of the Thread @ OS Scheduler..
 *
 * @return not NULL if success
 */
rAthread rathread_createEx( rAthreadProc entryPoint,  void *param,  size_t szStack,  RATHREAD_PRIO prio );


/**
 * Destroys the given Thread immediatly
 *
 * @note The Handle gets invalid after call! dont use it afterwards. 
 *
 * @param handle - thread to destroy.
 */
void rathread_destroy ( rAthread handle );


/** 
 * Returns the thread handle of the thread calling this function
 * 
 * @note this wont work @ programms main thread
 * @note the underlying implementation might not perform very well, cache the value received! 
 * 
 * @return not NULL if success
 */
rAthread rathread_self( );


/**
 * Returns own thrad id (TID) 
 *
 * @note this is an unique identifier for the calling thread, and 
 *        depends on platfrom / compiler, and may not be the systems Thread ID! 
 *
 * @return -1 when fails, otherwise >= 0
 */
int rathread_get_tid();


/**
 * Waits for the given thread to terminate 
 *
 * @param handle - thread to wait (join) for
 * @param out_Exitcode - [OPTIONAL] - if given => Exitcode (value) of the given thread - if it's terminated
 * 
 * @return true - if the given thread has been terminated.
 */
bool rathread_wait( rAthread handle,  void* *out_exitCode );


/** 
 * Sets the given PRIORITY @ OS Task Scheduler
 * 
 * @param handle - thread to set prio for
 * @param rio - the priority (RAT_PRIO_LOW ... )
 */
void rathread_prio_set( rAthread handle, RATHREAD_PRIO prio );


/** 
 * Gets the current Prio of the given trhead
 *
 * @param handle - the thread to get the prio for.
 */
RATHREAD_PRIO rathread_prio_get( rAthread handle);


/**
 * Tells the OS scheduler to yield the execution of the calling thread
 * 
 * @note: this will not "pause" the thread,
 *			it just allows the OS to spent the remaining time 
 *			of the slice to another thread.
 */
void rathread_yield();



void rathread_init();
void rathread_final();


#endif /* _COMMON_THREAD_H_ */