PDA

Просмотр полной версии : [Plugin] Timer Fix



Desulaid
02.02.2019, 14:49
Timer Fix v1.0.8

Описание
Данный плагин делает таймеры более точными

Нативные функции

native SetTimer(funcname[], interval, bool:repeat);
native SetTimerEx(funcname[], interval, bool:repeat, const format[], {Float,_}:...);
native KillTimer(const id);
native KillAllTimers();
native IsValidTimer(timerid);
native GetTimerInterval(timerid);
native SetTimerInterval(timerid, interval);
native GetTimerRemainingTime(timerid);


Пример использования

#include <timerfix>

new num = 0;
new timer;

main() {
timer = SetTimer("callback",1000,true)
}

forward callback();
public callback() {
if(++num >= 5) {
if(IsValidTimer(timer)) KillTimer(timer);
SetTimerEx("callbackEx",1000,false,"d",num);
}
}

forward callbackEx(num);
public callbackEx(num) {
printf("Num: %d",num);
KillAllTimers();
}


Скачать
Binaries(Windows, Linux) (https://github.com/KashCherry/Timer-Fix-plugin/releases)
Source code (https://github.com/KashCherry/Timer-Fix-plugin)

Ссылка на официальный топик (https://forum.sa-mp.com/showthread.php?p=4000122)

alonso
02.02.2019, 16:15
Есть еще одна нативная функция.
native GetTimerRemainingTime(timerid);

Desulaid
02.02.2019, 16:23
Есть еще одна нативная функция.
native GetTimerRemainingTime(timerid);

Обновил.

Daniel_Cortez
02.02.2019, 16:30
Знаю, что автор плагина, скорее всего, не следит за этой темой, но всё же: не совсем понятно, для чего вообще может понадобиться функция KillAllTimers(). Единственный сценарий, который приходит в голову - вызывать эту функцию при перезагрузке мода/ФС, чтобы убедиться, что перед перезагрузкой все таймеры были уничтожены, и тем самым не допустить утечек памяти - но по идее в этом не должно быть никакой необходимости, т.к. при выгрузке скрипта все созданные из него таймеры уничтожаются автоматически.

x86
02.02.2019, 17:35
Кстати, зачем использовать свои local_ptr, если есть scoped_ptr от буста и unique_ptr от плюсов 11 года. Названия файлов то используют заглавную букву, то нет. В коде все еще используются рав указатели (не включая в это апишку для сервера), хотя автор уже использует C++11. Кроме того, во многих местах следует добавить ключевое слово noexcept, либо throw(), чтобы уменьших размер бинарника, т.к. идет проверка на исключения.

Складывается впечатление, что исходники были написаны несколькими людьми, хотя история коммитов говорит об обратном.