#ifndef _THREADPOOL_H_ #define _THREADPOOL_H_ #include "kpacket.h" #ifdef __cplusplus extern "C" { #endif typedef void *(*thread_routine)(void *param); /** * @file threadpool.h * @brief Threadpool Header File */ /** * Increase this constants at your own risk * Large values might slow down your system */ #define MAX_THREADS 16 typedef struct threadpool_s threadpool; /** * @function threadpool_create * @brief Creates a threadpool object. * @param thread_count Number of worker threads. * @param queue_size Size of the queue(routine) for threadpool. * @return a newly created thread pool or NULL */ threadpool *threadpool_create(uint32_t max_thread_cnt); /** * @function threadpool_add * @brief add a new task in the queue of a thread pool * @param pool Thread pool to which add the task. * @param function Pointer to the function that will perform the task. * @param packet Packet to be passed to the function. * @return 0 if all goes well, negative values in case of error (@see * threadpool_error_t for codes). */ uint32_t threadpool_add(threadpool *pool, thread_routine routine, kpacket *packet); //delete a routine uint32_t threadpool_del(threadpool *pool, thread_routine routine); /** * @function threadpool_destroy * @brief Stops and destroys a thread pool. * @param pool Thread pool to destroy. * * Known values for flags are 0 (default) and threadpool_graceful in * which case the thread pool doesn't accept any new tasks but * processes all pending tasks before shutdown. */ uint32_t threadpool_destroy(threadpool *pool); void threadpool_dump(threadpool *pool); void threadpool_test(); #ifdef __cplusplus } #endif #endif /* _THREADPOOL_H_ */