PDA

Просмотр полной версии : [Вопрос] "Оптимизация" или миф?



HarrWe
26.06.2017, 23:15
Приветствую, недавно 1 человек показал мне интересную "фишку". Практически в каждом моде есть еже-секундный таймер, в котором обычно обрабатываются игроки и транспорт. Так вот, суть этой "фишки" заключается в том что в OnGameModeInit создаётся 1 таймер,

SetTimerEx("UpdatePlayers",500,0,"");
Внутри этого таймера создаётся другой таймер:

SetTimerEx("UpdateVehicles",500,0,"");
И внутри этого таймера создаётся снова первый таймер.

SetTimerEx("UpdatePlayers",500,0,"");
Если подумать то кажется что это неплохая оптимизация. Нарисовал график как я себе это представляю.
https://pp.userapi.com/c637316/v637316586/5cff6/Vyvw15aNzC0.jpgЭто только теория, что вы скажете на это? По сути эта "фича" избавляет мод от пиковых нагрузок каждую секунду.

ziggi
26.06.2017, 23:31
Уж лучше реализовать это одним таймером. Будет быстрее, точнее и понятнее.


SetTimer("UpdateEverything", 500, 1);


enum E_UPDATE_STATUS {
bool:E_UPDATE_PLAYERS,
bool:E_UPDATE_VEHICLES,
}

static
gUpdateStatus[E_UPDATE_STATUS];

public UpdateEverything()
{
if (!gUpdateStatus[E_UPDATE_PLAYERS]) {
UpdatePlayers();
gUpdateStatus[E_UPDATE_PLAYERS] = true;
} else if (!gUpdateStatus[E_UPDATE_VEHICLES]) {
UpdateVehicles();
gUpdateStatus[E_UPDATE_VEHICLES] = true;
} else {
for (new E_UPDATE_STATUS:status; _:status < sizeof(gUpdateStatus); _:status++) {
gUpdateStatus[status] = false;
}
}
}

P.S. Код не тестил, мог накосячить с тегами.

HarrWe
26.06.2017, 23:45
Уж лучше реализовать это одним таймером. Будет быстрее, точнее и понятнее.


SetTimer("UpdateEverything", 500, 1);


enum E_UPDATE_STATUS {
bool:E_UPDATE_PLAYERS,
bool:E_UPDATE_VEHICLES,
}

static
gUpdateStatus[E_UPDATE_STATUS];

public UpdateEverything()
{
if (!gUpdateStatus[E_UPDATE_PLAYERS]) {
UpdatePlayers();
gUpdateStatus[E_UPDATE_PLAYERS] = true;
} else if (!gUpdateStatus[E_UPDATE_VEHICLES]) {
UpdateVehicles();
gUpdateStatus[E_UPDATE_VEHICLES] = true;
} else {
for (new E_UPDATE_STATUS:status; _:status < sizeof(gUpdateStatus); _:status++) {
gUpdateStatus[status] = false;
}
}
}

P.S. Код не тестил, мог накосячить с тегами.
Спасибо за совет, но почему нельзя было сделать так? Убрав 1 условие else if, а сделать в else.

if (!update_status[update_players])
{
update_status[update_vehicles] = false;
update_status[update_players] = true;
}
else
{
update_status[update_players] = false;
update_status[update_vehicles] = true;
}
P.S уже догадался. Что бы легко было добавлять новые пункты для обновления.