#include #include #include #include "queue.h" typedef struct { long long wait; int seq; } my_data_t; void my_processor( void * arg_) { my_data_t * data = (my_data_t *)arg_; if ( !data) return; printf( "==> starting packet %d, %lld\n", data->seq, data->wait); fflush( stdout); while ( --data->wait); printf( "<== ending packet: %d\n", data->seq); fflush( stdout); } void my_reaper( void * arg_) { my_data_t * data = (my_data_t *)arg_; printf( "<=> wasting packet %d\n", data->seq); fflush( stdout); free( arg_); } int main( int argc, char ** argv) { queue_t * work; int i; work = queue_create( 16, 3, my_reaper); sleep(1); for ( i=1; i<50; i++) { my_data_t * data = (my_data_t *)malloc( sizeof( my_data_t)); data->seq = i; data->wait = (long long)(50^i) << 18; queue_insert( work, my_processor, (void *)data); } queue_insert_last( work); queue_wait_last( work); queue_destruct( work); return 0; }