int threadInitialize() { char input[10]; int temp; int returnCode; int maxThreads = sizeUniverseX > sizeUniverseY ? sizeUniverseX-2 : sizeUniverseY-2; /* The maximum number of threads equals to the size of the biggest dimension. */ printf("\n"); printf("############################################\n"); printf("## Please enter the number of threads. ##\n"); printf("############################################\n"); printf("\n>>> "); fgets(input,sizeof(input),stdin); temp = atoi(input); if (temp > 0) { numberThreads=temp; omp_set_num_threads(numberThreads); /* Set the number of threads based on the user input. */ printf("\n"); printf("############################################\n"); printf("## It shall be done. ##\n"); printf("############################################\n"); /* Timed Version */ gettimeofday(&time1,NULL); angel(); gettimeofday(&time2,NULL); printf("Calculation complete.\n"); printf("Total computation time: %4.3f milliseconds.\n", (double)(((double)(time2.tv_sec * 1000000 + time2.tv_usec) - (double)(time1.tv_sec * 1000000 + time1.tv_usec))/1000)); returnCode=0; } else { returnCode=20; printf("\n"); printf("############################################\n"); printf("# Almighty as you are, this can't be done. #\n"); printf("############################################\n"); printf("# Needed positive number of threads. #\n"); printf("############################################\n"); } return(returnCode); }
AngelProviderBaseT<ProviderT, ObjectT, AngelT, AntiT>::AngelProviderBaseT(Handler<Heap> const& heap, std::string const& provname, Handler<Heaven> const& heaven) :AngelProvider(heap, provname, heaven) { this->registerPureNativeClosure("newElementTarget", [this](ObjectT* obj, std::string elementId){ return obj->angel()->newElementTarget(elementId)->donutObject(this->heap().lock()); }); this->registerPureNativeClosure("newWidgetTarget", [this](ObjectT* obj, std::string elementId, std::string widgetGuide){ return obj->angel()->newWidgetTarget(elementId, widgetGuide)->donutObject(this->heap().lock()); }); this->registerPureNativeClosure("findElementTarget", [this](ObjectT* obj, std::string elementId){ return obj->angel()->findElementTarget(elementId)->donutObject(this->heap().lock()); }); this->registerPureNativeClosure("findElementById", [this](ObjectT* obj, std::string elementId){ return obj->angel()->findElementById(elementId); }); this->registerPureNativeClosure("findWidgetTarget", [this](ObjectT* obj, std::string elementId, std::string widgetGuide){ return obj->angel()->findWidgetTarget(elementId, widgetGuide)->donutObject(this->heap().lock()); }); this->registerReactiveNativeClosure("attatchTarget", [this](ObjectT* dangel, AngelTargetObject* dtarget) { Handler<AngelT> angel(dangel->angel()); Handler<AngelTarget> target(dtarget->angelTarget()); angel->attatchTarget(target); AntiT side_; AngelSideEffect& side = side_; side.op = AngelSideEffect::DetatchTarget; side.detatchedTarget_ = target; return std::make_tuple(dtarget, Just(side_)); }); this->registerReactiveNativeClosure("detatchTarget", [this](ObjectT* dangel, AngelTargetObject* dtarget) { Handler<AngelT> angel(dangel->angel()); Handler<AngelTarget> target(dtarget->angelTarget()); angel->detatchTarget(target); AntiT side_; AngelSideEffect& side = side_; side.op = AngelSideEffect::AttatchTarget; side.attatchedTarget_ = target; return std::make_tuple(dtarget, Just(side_)); }); }
static void serviceThread(void *data) { if (registerService() < 0) { mprError(mpr, "Can't register service"); ExitThread(0); return; } updateStatus(SERVICE_RUNNING, 0); /* * Start the service and watch over it. */ angel(); updateStatus(SERVICE_STOPPED, 0); ExitThread(0); }