17 fprintf( stderr,
" -v version\n"
19 " -V LOG_LEVEL (LOG_DEBUG,INFO,NOTICE,ERR)\n" );
22void process_args(
int argc,
char **argv )
27 while( ( getoptret = getopt( argc, argv,
"vhV:" ) ) != EOF)
32 fprintf( stderr,
"Date de compilation : %s a %s.\n", __DATE__, __TIME__ );
35 if( !strncmp(
"LOG_NULL", optarg, 5 ) )
41 if( !strncmp(
"LOG_NOTICE", optarg, 6 ) )
47 if( !strncmp(
"LOG_INFO", optarg, 7 ) )
53 if( !strncmp(
"LOG_ERR", optarg, 5 ) )
59 if( !strncmp(
"LOG_DEBUG", optarg, 5 ) )
65 fprintf( stderr,
"%s n'est pas un niveau de log valide.\n", optarg );
78 fprintf( stderr,
"\n Missing log level\n" );
93void *occupy_thread(
void *rest )
97 intptr_t sleep_value = (intptr_t)(rest) ;
99 n_log(
LOG_DEBUG,
"Starting to sleep %d usecs on thread %lld", sleep_value , pthread_self() );
101 if( sleep_value < 1000000 )
103 usleep( sleep_value );
107 usleep( (sleep_value)%1000000 );
108 sleep( (sleep_value/1000000) );
111 n_log(
LOG_DEBUG,
"End of sleep %d usecs on thread %lld", sleep_value , pthread_self() );
116int main(
int argc,
char **argv)
119 int nb_waiting_threads = 2 * nb_active_threads ;
120 int nb_total_threads = (nb_active_threads + nb_waiting_threads );
125 process_args( argc, argv );
127 n_log(
LOG_INFO,
"Creating a new thread pool of %d active and %d waiting threads" , nb_active_threads , nb_waiting_threads );
130 n_log(
LOG_INFO,
"Adding new %d new tasks..." , nb_total_threads );
131 for(
int it = 0 ; it < nb_total_threads ; it ++ )
134 int sleep_value = 1+rand()%100 ;
138 n_log(
LOG_ERR,
"Error adding client management to thread pool" );
141 n_log(
LOG_INFO,
"Adding tasks done. Waiting for pool thread to complete the tasks..." );
#define __n_assert(__ptr, __ret)
macro to assert things
#define n_log(__LEVEL__,...)
Logging function wrapper to get line and func.
#define LOG_DEBUG
debug-level messages
#define LOG_ERR
error conditions
void set_log_level(const int log_level)
Set the global log level value ( static int LOG_LEVEL )
#define LOG_NOTICE
normal but significant condition
#define LOG_NULL
no log output
#define LOG_INFO
informational
int get_nb_cpu_cores()
get number of core of current system
int destroy_threaded_pool(THREAD_POOL **pool, int delay)
delete a thread_pool, exit the threads and free the structs
int add_threaded_process(THREAD_POOL *thread_pool, void *(*func_ptr)(void *param), void *param, int mode)
add a function and params to a thread pool
#define DIRECT_PROC
processing mode for added func, direct start
int wait_for_threaded_pool(THREAD_POOL *thread_pool, int delay)
Wait for all the launched process in the thread pool to terminate.
THREAD_POOL * new_thread_pool(int nbmaxthr, int nb_max_waiting)
Create a new pool of nbmaxthr threads.
Structure of a trhead pool.