static void *Outputter(void *arg) { lpel_stream_desc_t *in = LpelStreamOpen((lpel_stream_t*)arg, 'r'); char *item; int term = 0; printf("Outputter START\n"); while (!term) { item = LpelStreamRead(in); assert( item != NULL ); printf("\n\n*************************************\nOut: %s\n*************************************\n", item ); if ( 0 == strcmp( item, "T\n")) { term = 1; } //free( item); SCCFreePtr(item); } // end while LpelStreamClose( in, 1); printf("Outputter TERM\n"); LpelStop(); return NULL; }
int SNetThreadingStop(void) { /* send a stop signal to LPEL */ LpelStop(); /* following call will block until the workers have finished */ LpelCleanup(); return 0; }
void *Consumer(void *inarg) { char *msg; int i, term; lpel_streamset_t lst = NULL; lpel_stream_iter_t *iter; printf("start Consumer\n" ); /* open streams */ for (i=0; i<NUM_COLL; i++) { LpelStreamsetPut( &lst, LpelStreamOpen(scoll[i], 'r')); } iter = LpelStreamIterCreate(&lst); term = 0; do { /* here we do wait */ printf("Consumer poll\n"); LpelStreamPoll( &lst); printf("Consumer resumes\n"); printf("Consumer iterates:\n"); LpelStreamIterReset(iter, &lst); while( LpelStreamIterHasNext(iter)) { lpel_stream_desc_t *snext = LpelStreamIterNext(iter); if ( NULL != LpelStreamPeek( snext )) { msg = (char *) LpelStreamRead( snext); if (0 == strcmp( msg, "T\n" )) { term=1; } else { printf("%s", msg ); free(msg); } } } //sleep(5); } while (0 == term) ; /* print & free termination message */ printf("%s", msg ); free(msg); /* close streams */ LpelStreamIterReset(iter, &lst); while( LpelStreamIterHasNext(iter)) { lpel_stream_desc_t *snext = LpelStreamIterNext(iter); LpelStreamClose( snext, 1); } LpelStreamIterDestroy( iter); printf("exit Consumer\n" ); LpelStop(); return NULL; }