00001 00002 #ifndef MICROFEED_THREADS_H 00003 #define MICROFEED_THREADS_H 00004 00022 typedef struct _MicrofeedThread MicrofeedThread; 00023 00024 typedef struct _MicrofeedThreadPool MicrofeedThreadPool; 00025 00029 typedef struct _MicrofeedMutex MicrofeedMutex; 00030 00031 typedef void* (*MicrofeedThreadFunction)(void* data); 00032 00033 typedef void (*MicrofeedThreadExitCallback)(MicrofeedThread* thread, void* user_data); 00034 00035 typedef struct { 00036 void* (*thread_new)(MicrofeedThreadFunction function, void* data); 00037 void (*thread_free)(void* thread_implementation); 00038 void* (*thread_get_current)(void); 00039 void (*thread_send_signal)(void* thread_implementation, int signal_number); 00040 void (*thread_join)(void* thread_implementation); 00041 void* (*mutex_new)(void); 00042 void (*mutex_free)(void* mutex_implementation); 00043 void (*mutex_lock)(void* mutex_implementation); 00044 void (*mutex_unlock)(void* mutex_implementation); 00045 } MicrofeedThreadFunctions; 00046 00047 void microfeed_thread_set_functions(MicrofeedThreadFunctions* thread_functions); 00048 00049 void microfeed_thread_init(void); 00050 void microfeed_thread_cleanup(void); 00051 00052 MicrofeedThread* microfeed_thread_new(MicrofeedThreadFunction function, void* data); 00053 MicrofeedThread* microfeed_thread_new_with_exit_callback(MicrofeedThreadFunction function, void* data, MicrofeedThreadExitCallback exit_callback, void* user_data); 00054 void microfeed_thread_free(MicrofeedThread* thread); 00055 MicrofeedThread* microfeed_thread_ref(MicrofeedThread* thread); 00056 void microfeed_thread_unref(MicrofeedThread* thread); 00057 00058 MicrofeedThread* microfeed_thread_get_current(void); 00059 void microfeed_thread_send_signal(MicrofeedThread* thread, int signal_number); 00060 void microfeed_thread_join(MicrofeedThread* thread); 00061 unsigned long microfeed_thread_get_id(MicrofeedThread* thread); 00062 00063 MicrofeedThreadPool* microfeed_thread_pool_new(unsigned int maximum_thread_count); 00064 MicrofeedThreadPool* microfeed_thread_pool_new_with_exit_callback(unsigned int max_threads, MicrofeedThreadExitCallback exit_callback, void* user_data); 00065 MicrofeedThread* microfeed_thread_pool_queue_thread(MicrofeedThreadPool* thread_pool, MicrofeedThreadFunction function, void* data); 00066 MicrofeedThread* microfeed_thread_pool_queue_thread_with_exit_callback(MicrofeedThreadPool* thread_pool, MicrofeedThreadFunction function, void* data, MicrofeedThreadExitCallback exit_callback, void* user_data); 00067 unsigned int microfeed_thread_pool_get_started_thread_count(MicrofeedThreadPool* thread_pool); 00068 unsigned int microfeed_thread_pool_get_waiting_thread_count(MicrofeedThreadPool* thread_pool); 00069 void microfeed_thread_pool_set_maximum_thread_count(MicrofeedThreadPool* thread_pool, unsigned int maximum_thread_count); 00070 00071 MicrofeedMutex* microfeed_mutex_new(void); 00072 void microfeed_mutex_free(MicrofeedMutex* mutex); 00073 void microfeed_mutex_lock(MicrofeedMutex* mutex); 00074 void microfeed_mutex_unlock(MicrofeedMutex* mutex); 00075 00081 #endif