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);

}
示例#2
0
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_));
	});
}
示例#3
0
文件: angel.c 项目: doghell/appweb-3
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);
}