/* Main execution of the classifier. */ int main(int argc,char *argv[]){ number i,o,x=0,t=sysconf(_SC_NPROCESSORS_ONLN); decimal result; char *fnr=NULL,*fnf=NULL,*fnm=NULL,*fnw=NULL; while((o=getopt(argc,argv,"t:d:m:w:r:h"))!=-1){ switch(o){ case 't': t=atoi(optarg); if(t>256||t<1)show_error("Number of threads must be on the 1-256 range"); break; case 'r': fnr=optarg; break; case 'd': fnf=optarg,x++; break; case 'm': fnm=optarg,x++; break; case 'w': fnw=optarg; break; case 'h': show_help(argv[0]),exit(1); break; } } if(x<2)show_help(argv[0]),exit(1); /* Test if exists needed arguments. */ workers *pool=workers_create(t); data *feas=feas_load(fnf,pool); /* Load the data from the specified file. */ gmm *gmix=NULL,*gworld=NULL; if(fnw!=NULL)gworld=gmm_load(fnw); /* Load world model if is defined. */ gmix=gmm_load(fnm); if(fnr!=NULL)result=gmm_classify(fnr,feas,gmix,gworld,pool); else result=gmm_simple_classify(feas,gmix,gworld,pool); fprintf(stdout,"Score: %.10f\n",result); workers_finish(pool); gmm_delete(gmix); if(gworld!=NULL)gmm_delete(gworld); feas_delete(feas); return 0; }
int main(int argc, const char** argv) { struct sockaddr_storage addr; socklen_t addrlen; options_t options; workers_t workers; uint8_t running, ready; sigset_t set; /* Check arguments. */ if (argc == 1) { usage(argv[0]); return -1; } if (build_socket_address(argv[argc - 1], &addr, &addrlen) < 0) { fprintf(stderr, "Invalid socket address '%s'.\n", argv[argc - 1]); return -1; } if (options_parse(argc, argv, &options) < 0) { usage(argv[0]); return -1; } /* Block signals SIGINT and SIGTERM. */ sigemptyset(&set); sigaddset(&set, SIGINT); sigaddset(&set, SIGTERM); if (pthread_sigmask(SIG_BLOCK, &set, NULL) < 0) { fprintf(stderr, "Error blocking signals.\n"); options_free(&options); return -1; } /* Create worker threads. */ if (workers_create((const struct sockaddr*) &addr, addrlen, &options, &running, &ready, &workers) < 0) { fprintf(stderr, "Error creating worker threads.\n"); options_free(&options); return -1; } /* Join worker threads. */ workers_join(&workers, &running); /* Show statistics. */ workers_statistics(&workers); options_free(&options); return 0; }