SA-MP Forums Archive
глобальный таймер - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: глобальный таймер (/showthread.php?tid=449535)



глобальный таймер - Kuroki - 09.07.2013

добрый день, можно ли делать подобное? знаю что много таймеров нагружает мод и решил сделать подобное:
и обновляю его каждую секунду т.е всё работает вроде без ошибок, скажите это ведь лучше 7 таймеров ?
PHP код:
public GlTimer()
{
     
Fresh(); //Êàæäàÿ ñåêóíäà
     
new GTCount GetTickCount();
     if(
TimerGlob[1] <= GTCount)
     {
          
TimerGlob[1] = GTCount 10800000;
          
Reklamaupdate2();
     }
     if(
TimerGlob[2] <= GTCount)
     {
          
          
TimerGlob[2] = GTCount + (1000*60*30);
          
ChangeWeather();
     }
     if(
TimerGlob[3] <= GTCount)
     {
          
TimerGlob[3] = GTCount + (5000);
          
CheckCheaters();
          
     }
     if(
TimerGlob[4] <= GTCount)
     {
          
TimerGlob[4] = GTCount + (300000);
          
HPCheck();
     }
      if(
TimerGlob[5] <= GTCount)
     {
          
TimerGlob[5] = GTCount + (5000);
          
GzCheck();
     }
      if(
TimerGlob[6] <= GTCount)
     {
          
TimerGlob[6] = GTCount + (10000);
          
MzCheck();
     }
    return 
1;




Re: глобальный таймер - ZN-Freedom - 09.07.2013

Можно по-другому.

PHP код:

int globalTimer
;
public 
globalUpdate ()
{
        ++ 
globalTimer;
        if (!(
globalTimer interval_1))
                
func_1 ();
        if (!(
globalTimer interval_2))
                
func_2 ();
        
// ...............
        
if (!(globalTimer interval_n))
                
func_n ();
        if (
globalTimer == SCD)
                
globalTimer = -1;
        return 
1;

Предполагается, что у тебя есть n функций.
Каждая выполняется согласно своему интервалу (в секундах).

Ставишь секундный таймер на функцию globalUpdate; repeat = true.

SCD, - the smallest common dividend, - наименьшее общее делимое.

Тебе его нужно посчитать, зная интервалы запуска всех функций.
Требуется для того, чтобы не "сбросить" некоторое кол-во времени, оставшееся до запуска какой-либо функции (проще говоря, все функции будут запускаться четко по плану, а не "как хотят").

Например: 3 функции с интервалами в 20, 40, 55 секунд. SCD = 440 секунд (все интервалы делят это число нацело).

P. S.
Я не думаю, что у тебя там будут огромные интервалы, при которых SCD превысит max integer.
Но если вдруг - можешь сменить integer на float.


Re: глобальный таймер - Stepashka - 09.07.2013

Quote:
Originally Posted by Kuroki
Посмотреть сообщение
добрый день, можно ли делать подобное? знаю что много таймеров нагружает мод
Это бред, таймеры никак не влияют на нагрузку, мод нагружает только код который они вызывают. Если ваш мод испытывает проблемы в текущем виде, изменение 7 таймеров на один не дадут ни какого эффекта. Оптимизация вызываемого кода будет куда эффективней.


Re: глобальный таймер - Den_Bellik - 09.07.2013

Много используешь переменных и лучше бы использовал char в TimerGlob, если хочеш юзать свой вариант.
Вот мой вариант:

PHP код:
public GlTimer()
{
    static 
tick;
    
tick++;
    if(
tick 10 == 0)
    {
    
// каждый 10 сек.
    
}
    if(
tick 1800 == 0// 60*30 = 1800 сек. ( это 30 мин. ) 
    
{
    
// каждый 30 мин.
    
}
    return 
1;




Re: глобальный таймер - Kuroki - 09.07.2013

Всем спасибо