/** * Run Worker * * @param nr id of worker which will be launched * @return 0 when success, otherwise error number */ int WorkerRun( Worker *wrk ) { if( wrk == NULL ) { FERROR("[WorkerRun] Cannot run worker, worker is NULL\n"); return 1; } clock_t start, end; start = clock(); size_t stacksize = 16777216; //16 * 1024 * 1024; pthread_attr_t attr; pthread_attr_init( &attr ); pthread_attr_setstacksize( &attr, stacksize ); wrk->w_Thread = ThreadNew( WorkerThread, wrk, TRUE, &attr ); if( wrk->w_Thread == NULL ) { FERROR("[WorkerRun] Cannot create thread!\n"); WorkerDelete( wrk ); return -1; } end = clock(); wrk->w_WorkMicros = end - start; wrk->w_WorkSeconds = wrk->w_WorkMicros / 1000000; return 0; }
Service *ServiceNew( char *command, BOOL autostart ) { Service *service = NULL; if( ( service = calloc( 1, sizeof( Service ) ) ) != NULL ) { printf("ServiceNew\n"); int size = strlen( command ); if( size > 0 ) { if( ( service->s_Command = calloc( size+1, sizeof( char ) ) ) != NULL ) { memcpy( service->s_Command, command, size*sizeof(char) ); } } service->s_Buffer = calloc( SERVICE_BUFFER_MAX, sizeof(BYTE) ); service->s_State = SERVICE_STOPPED; if( autostart ) { printf("Starting thread\n"); service->s_Thread = ThreadNew( ServiceThread, service ); if( service->s_Thread == NULL ) { ServiceDelete( service ); } } } return service; }
int WorkerRun( Worker *wrk ) { if( wrk == NULL ) { ERROR("[WorkerRun] Cannot run worker, worker is NULL\n"); return 1; } clock_t start, end; start = clock(); //DEBUG("[WorkerRun] STARTING thread %p\n", wrk); wrk->w_Thread = ThreadNew( WorkerThread, wrk ); if( wrk->w_Thread == NULL ) { ERROR("[WorkerRun] Cannot create thread!\n"); WorkerDelete( wrk ); return -1; } end = clock(); wrk->w_WorkMicros = end - start; wrk->w_WorkSeconds = wrk->w_WorkMicros / 1000000; return 0; }
int ServiceStart( Service *s ) { if( !s->s_Thread ) { s->s_Thread = ThreadNew( ServiceThread, s ); } return 0; }
void main(int argc, char **argv) { int i; bool verbose = (argc == 2 && (strcmp(argv[1], "-v") == 0)); Semaphore oxygenReady, hydrogenReady; // semaphores used as counters InitThreadPackage(verbose); oxygenReady = SemaphoreNew("Oxygen Ready", 0); hydrogenReady = SemaphoreNew("Hydrogen Ready", 0); 13 for (i = 0; i < NUM_WATER; i++) ThreadNew(“Oxygen”, Oxygen, 2, oxygenReady, hydrogenReady); for (i = 0; i < 2 * NUM_WATER; i++) ThreadNew(“Hydrogen”, Hydrogen, 2, oxygenReady, hydrogenReady); RunAllThreads(); printf("All done!\n"); SemaphoreFree(oxygenReady); SemaphoreFree(hydrogenReady); }
SSHServer *SSHServerNew() { SSHServer *ts = NULL; if( ( ts = calloc( 1, sizeof( SSHServer ) ) ) != NULL ) { #ifdef ENABLE_SSH ssh_threads_set_callbacks( ssh_threads_get_pthread() ); ssh_init(); ts->sshs_Thread = ThreadNew( SSHThread, ts ); #endif } return ts; }
/** * Creates a new Event Manager structure and launches its thread * * @return pointer to the newly created event manager */ EventManager *EventManagerNew( void *sb ) { EventManager *em = FCalloc( sizeof( EventManager) , 1 ); DEBUG("[EventManager] start\n"); if( em != NULL ) { em->lastID = 0xf; em->em_SB = sb; em->em_EventThread = ThreadNew( EventManagerLoopThread, em, TRUE, NULL ); } else { Log( FLOG_FATAL, "Cannot allocate memory for EventManager!\n"); } return em; }
/** * Websocket start thread function * * @param ws pointer to WebSocket structure * @return 0 when success, otherwise error number */ int WebSocketStart( WebSocket *ws ) { DEBUG1("[WS] Starting websocket thread\n"); ws->ws_Thread = ThreadNew( WebsocketThread, ws, TRUE, NULL ); return 0; }