예제 #1
0
void Server::RunUpdateLoop()
{
    uint32 realCurrTime = 0;
    uint32 realPrevTime = GetMSTime();

    uint32 prevSleepTime = 0; // used for balanced full tick time length

    while (_isRunning)
    {
        realCurrTime = GetMSTime();
        uint32 diff = GetMSTimeDiff(realPrevTime, realCurrTime);
        _update(diff);
        realPrevTime = realCurrTime;
        // diff (D0) include time of previous sleep (d0) + tick time (t0)
        // we want that next d1 + t1 == _SLEEP_CONST
        // we can't know next t1 and then can use (t0 + d1) == _SLEEP_CONST requirement
        // d1 = _SLEEP_CONST - t0 = _SLEEP_CONST - (D0 - d0) = _SLEEP_CONST + d0 - D0
        if (diff <= _SLEEP_CONST + prevSleepTime)
        {
            prevSleepTime = _SLEEP_CONST + prevSleepTime - diff;
            ACE_OS::sleep(ACE_Time_Value(0, static_cast<uint64>(prevSleepTime) * 1000L));
        }
        else
            prevSleepTime = 0;
    }

    _cleanup();
}
예제 #2
0
int main(int argc, char ** argv){
	int threadNumber	= (argc >= 2)? atoi(argv[1]) : 20;
	inputTimes			= (argc >= 3)? atoi(argv[2]) : 1;
	inputTimes			*= baseTimes;

	pthread_t * threadPool = (pthread_t*)malloc(sizeof(pthread_t)*threadNumber);
	// To measure the duration
	printf("Start...................\n\n");
	double	start, finish, duration;
	int		i;

	start = GetMSTime();

	for(i = 0; i < threadNumber; ++i){
		if(pthread_create(threadPool+i, NULL, heapOperationThread, NULL))
			printf("Error: thread %d cannote be created\n", i);
	}
	//WaitForMultipleObjects(threadNumber, threadPool, true, INFINITE);
	for(i = 0; i < threadNumber; ++i){
	//	CloseHandle(threadPool[i]);
		pthread_join(threadPool[i], NULL);
	}

	finish = GetMSTime();

	duration = (double)(finish - start) / 1000;//ms->s
	printf("End.......................\n\n");
	printf("The duration is %.2fs\n", duration);
	//printf("Input any character to proceed\n");
	//getchar();

	free(threadPool);

	return 0;
}
예제 #3
0
void Kitchen::run()
{
    uint64 prevTime = GetMSTime();
    for (;;)
    {
        uint32 diff = GetMSTimeDiffToNow(prevTime);
        prevTime = GetMSTime();
        update(diff);
        usleep(50 * IN_MILLISECONDS);
    }
}
예제 #4
0
Pizza* Kitchen::takeNewPizza()
{
    Pizza* pizz = _queue.get();
    _lastPizza = GetMSTime();
    ++_inProgress;
    return pizz;
}
예제 #5
0
void Kitchen::pizzaFinished(Pizza* pizz)
{
    std::stringstream ss;
    ss << *pizz;
    send(ss.str());
    delete pizz;
    _lastPizza = GetMSTime();
    --_inProgress;
}
예제 #6
0
int main()
{
	MYSQL mysql;
	mysql_init(&mysql);
	if (mysql_real_connect(&mysql, "192.168.56.101", "yhr", "yhr", "test", 0, NULL, 0) == NULL)
	{
		printf("failed to connect database: Error %s\n", mysql_error(&mysql));
		return -1;
	}
	char sql[128] = {0};
	snprintf(sql, 128, "SELECT * from t1");
	uint32 t = GetMSTime();
	if (mysql_query(&mysql, sql) != 0)
	{
		printf("failed query: Error %s\n", mysql_error(&mysql));
		return -1;
	}
	MYSQL_RES* result;
	result = mysql_store_result(&mysql);
	MYSQL_FIELD* fields;
	MYSQL_ROW row;
	unsigned long* lengths;
	int num_fields = mysql_num_fields(result);
	fields = mysql_fetch_fields(result);
	for (int i = 0; i < num_fields; i++)
	{
		//printf("%s\t", fields[i].name);
	}
	//printf("\n");
	while ((row = mysql_fetch_row(result)) != NULL)
	{
		lengths = mysql_fetch_lengths(result);
		for (int i = 0; i < num_fields; i++)
		{
			//printf("%s\t", row[i] ? row[i] : "NULl");
		}
		//printf("\n");
	}
	printf("time %d\n", GetMSTime() - t);

	return 0;
}
예제 #7
0
Kitchen::Kitchen(uint32 id, float cookTime, uint32 nbCook, uint32 regenTime) :
    _id(id), _cookTime(cookTime), _regenTime(regenTime),
    _cooks(nbCook), _regenTimer(0), _ingredientsMap(),
    _ingredientsMutex(), _communicator(id), _lastPizza(GetMSTime()),
    _inProgress(0)
{
    for (uint8 i = 0; i < INGREDIENTS_COUNT; ++i)
        _ingredientsMap.insert(std::pair<Ingredients, uint32>((Ingredients)i, 5));
    for (uint32 i = 0; i < nbCook; ++i)
    {
        _cooks[i] = new Cook(i + 1, this, cookTime);
        _cooks[i]->run();
    }
}
예제 #8
0
void GameController::Run()
{
    Player* me = new Player(0,0,1);

    sObjMgr->CreateWorld();
    sObjMgr->Update();

    DWORD realCurrTime = 0;
    DWORD realPrevTime = GetMSTime();

    DWORD diff;

    /* Example for using the sScreenLog class */
    sScreenLog->AddTrack(&diff,ScreenLog::Track::UINT,20,30,0xFFFF0000);

//	sScreenLog->AddTrack(&me->X,ScreenLog::Track::INT,20,50,0xFFFF0000);
//	sScreenLog->AddTrack(&me->Y,ScreenLog::Track::INT,20,70,0xFFFF0000);
    while(true)
    {
        realCurrTime = GetMSTime();
        diff = GetMSTimeDiff(realPrevTime,realCurrTime);

        Player* me = sObjMgr->Me();

        ReadKeyboard();

        if(KEY_PRESSED(DIK_F))
            me->Fire();

        if(KEY_DOWN(DIK_ESCAPE))
            break;
        if(KEY_DOWN(DIK_W))
            me->SetYVelocity(-3);
        if(KEY_DOWN(DIK_S))
            me->SetYVelocity(3);
        if(KEY_DOWN(DIK_A)) {
            me->SetXVelocity(-3);
            if(KEY_DOWN(DIK_D)) {
                new Explosion(me,me->GetX()+4,me->GetY()+(me->GetHeight()/2),19,0,false);
            }
        }
        if(KEY_DOWN(DIK_D)) {
            me->SetXVelocity(3);
            if(KEY_DOWN(DIK_A)) {
                new Explosion(me,me->GetX()+me->GetWidth()-4,me->GetY()+(me->GetHeight()/2),19,0,false);
            }
        }

        /* Oops :< */
        //if(KEY_UP(DIK_W) && KEY_UP(DIK_A) && KEY_UP(DIK_S) && KEY_UP(DIK_D))
        //	{
        //	me->SetXVelocity(0);
        //	me->SetYVelocity(0);
        //	}

        if(KEY_DOWN(DIK_R))
            me->SetPos(30,70);

        if(KEY_DOWN(DIK_Q))
            me->SetAngle(me->GetAngle()+0.1f);

        if(KEY_DOWN(DIK_E))
            me->SetAngle(me->GetAngle()-0.1f);

        if(KEY_DOWN(DIK_M))
            sWorld->PrintMap();

        if(KEY_DOWN(DIK_SPACE))
        {
            me->SetXVelocity(0);
            me->SetYVelocity(0);
        }

        sObjMgr->Update(/* diff */);
        FollowUnit(me);
        Render();

        realPrevTime = realCurrTime;
    }
}
예제 #9
0
파일: Utils.cpp 프로젝트: Wayt/Bomberman
uint32 GetMSTimeDiffToNow(uint32 time)
{
    return GetMSTimeDiff(time, GetMSTime());
}