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(); }
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; }
void Kitchen::run() { uint64 prevTime = GetMSTime(); for (;;) { uint32 diff = GetMSTimeDiffToNow(prevTime); prevTime = GetMSTime(); update(diff); usleep(50 * IN_MILLISECONDS); } }
Pizza* Kitchen::takeNewPizza() { Pizza* pizz = _queue.get(); _lastPizza = GetMSTime(); ++_inProgress; return pizz; }
void Kitchen::pizzaFinished(Pizza* pizz) { std::stringstream ss; ss << *pizz; send(ss.str()); delete pizz; _lastPizza = GetMSTime(); --_inProgress; }
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; }
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(); } }
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; } }
uint32 GetMSTimeDiffToNow(uint32 time) { return GetMSTimeDiff(time, GetMSTime()); }