void SimpleMutex(int numThreads, int lockon) { int i,j; HThread t[1000]; int status[1000]; char name[100]; HPriority prio; if (numThreads <1) numThreads=1; if (numThreads>1000) { printf("too many threads\n"); exit(1); } t2_lockon = lockon; printf(" creating %d threads\n",numThreads); fflush(stdout); t2_lock = HCreateLock("t2_lock"); t2_inc = (float)1.0 / numThreads; for (i=0; i<numThreads; i++){ j = i+1; sprintf(name,"thread%d",j); prio = i%3; t[i] = HCreateThread(name,10,prio,test2,(void *)prio); printf(" %d created\n",j); } printf(" waiting for termination\n"); for (i=0; i<numThreads; i++) HJoinThread(t[i],&status[i]); printf("Final sum = %f (should be 1)\n",t2_sum); }
void ParallelForkAndJoin(int numThreads,int delay) { int i,j; HThread t[1000]; int status[1000]; char name[100]; if (numThreads <1) numThreads=1; if (numThreads>1000) { printf("too many threads\n"); exit(1); } if (delay<0) delay = 0; test1_delay = delay; printf(" creating %d threads\n",numThreads); fflush(stdout); for (i=0; i<numThreads; i++){ j = i+1; sprintf(name,"thread%d",j); t[i] = HCreateThread(name,10,HPRIO_NORM,test1,(void *)j); printf(" %d created\n",j); } printf(" waiting for termination\n"); for (i=0; i<numThreads; i++){ HJoinThread(t[i],&status[i]); printf(" %d terminated with status %d\n",i+1,status[i]); fflush(stdout); } }
void BufferTest(int nChars,int bSize,int pDelay,int cDelay,char *pcPrioStr) { HPriority pp,cp; int n = nChars; int pstat,cstat; printf("Starting Buffer Test\n\n"); lock = HCreateLock("Buffer"); notfull = HCreateSignal("NotFull"); notempty = HCreateSignal("NotEmpty"); inx = 0; outx=0; used=0; bsize = bSize; pp = getpr(pcPrioStr[0]); cp = getpr(pcPrioStr[1]); pdel = pDelay; cdel = cDelay; prod_th = HCreateThread("Producer",10, pp, producer, (void *)n); cons_th = HCreateThread("Consumer",10, cp, consumer, (void *)n); HJoinThread(prod_th,&pstat); HJoinThread(cons_th,&cstat); printf("\n\nProducer terminated[%d chars sent]\n",pstat); printf("Consumer terminated[%d chars received]\n",cstat); }
void SimpleSignal(void) { HThread t; int status; t3_lock = HCreateLock("t3_lock"); t3_signal = HCreateSignal("t3_signal"); t = HCreateThread("t3wait",10,HPRIO_NORM,test3,(void *)0); printf(" press key to send signal\n"); getchar(); HSendSignal(t3_signal); HJoinThread(t,&status); }
int cTumkwsaSink::setupATK() { try { // ------- load HTK config...... int argc=3; const char* argv[3] = {"ASR","-C",NULL}; if (configfile != NULL) argv[2]=configfile; else argv[2]="asr.cfg"; if (InitHTK(argc,(char**)argv,version,TRUE)<SUCCESS){ COMP_ERR("failed to initialise ASR subsystem!"); } ConfParam *cParm[MAXGLOBS]; /* config parameters */ int numParm,i; char ngramFN[100],buf[100]; ngramFN[0] = '\0'; // Read configuration parms for ANGRAM to see if NGram used numParm = GetConfig((char *)"ANGRAM", TRUE, cParm, MAXGLOBS); if (numParm>0){ if (GetConfStr(cParm,numParm,(char *)"NGRAMFILE",buf)) strcpy(ngramFN,buf); } // Create Buffers feChan = new ABuffer("feChan"); ansChan = new ABuffer("ansChan"); // create a resource manager rman = new ARMan(); arec = new ARec("ARec",feChan,ansChan,rman,0); // create global resources hset = new AHmms("HmmSet"); // load info in config dict = new ADict("ADict"); gram = new AGram("AGram"); rman->StoreHMMs(hset); rman->StoreDict(dict); rman->StoreGram(gram); ResourceGroup *main = rman->NewGroup("main"); main->AddHMMs(hset); main->AddDict(dict); main->AddGram(gram); if (strlen(ngramFN)>0){ ANGram * ngram = new ANGram("ANGram"); rman->StoreNGram(ngram); main->AddNGram(ngram); } arec->Start(); arec->SendMessage("usegrp(main)"); arec->SendMessage("start()"); terminated = FALSE; } catch (ATK_Error e){ ReportErrors((char*)"ATK",e.i); return 0;} catch (HTK_Error e){ ReportErrors((char*)"HTK",e.i); return 0;} HThread t = HCreateThread("resultThread", 0, HPRIO_NORM, ATKresultThreadRunner, this); ATKresThread = t->thread; //smileThreadCreate( ATKresThread, ATKresultThreadRunner, this ); atkIsSetup=1; return 1; }