#ifndef __THREAD_POOL__H_ | |
#define __THREAD_POOL__H_ | |
#include "syn_primitive.h" | |
#include "double_list.h" | |
#include "seq_queue.h" | |
typedef enum {EThread_pool_unknown, EThread_pool_alloc, EThread_pool_init | |
, EThread_pool_run, EThread_pool_exit, EThread_pool_MAX}EThread_pool_status; | |
#define RELEASE_THREAD_INTERVAL 5*60 | |
typedef void (*THREAD_FUNC)(void *); | |
typedef void (*USER_FUNC)(void *thread_para); | |
typedef struct { | |
USER_FUNC timeout_callback; | |
unsigned long time_out; | |
}time_out_t; | |
typedef struct | |
{ | |
USER_FUNC process_func; | |
USER_FUNC release_func; | |
void *args; | |
time_out_t time_out_info; | |
}thread_func_t; | |
typedef struct | |
{ | |
thread_func_t thread_para; | |
unsigned int pri; | |
BOOL busy; | |
BOOL release; | |
unsigned long launch_time; | |
unsigned long time_out; | |
EThread_pool_status *pool_status; | |
thread_handle h_thread; | |
condition_handle thread_cond; | |
mutex_handle thread_lock; | |
}thread_info_t; | |
typedef struct | |
{ | |
unsigned int pri; | |
unsigned int min_thread_num; | |
unsigned int max_thread_num; | |
unsigned int pool_thread_num; | |
condition_handle manage_cond; | |
mutex_handle mange_lock; | |
unsigned long release_threads_interval; | |
d_list_t *idle_threads; | |
d_list_t *busy_threads; | |
seq_queue_t *task_queue; | |
sem_handle sem_inc; | |
thread_handle h_id; | |
EThread_pool_status status; | |
}thread_pool_t; | |
thread_pool_t *threadpool_create(unsigned int min_thread_num, unsigned int max_thread_num); | |
void threadpool_destroy(thread_pool_t *pool); | |
BOOL threadpool_add(thread_pool_t *pool, USER_FUNC process_func, void *args); | |
BOOL threadpool_add_timeout(thread_pool_t *pool, USER_FUNC process_func | |
, USER_FUNC release_func, void *args, time_out_t *time_out); | |
void tp_sleep(unsigned int ms); | |
#endif //__THREAD_POOL__H_ | |