Сейчас 05:09:24 Суббота, 23 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Функция PolledWait в цикле
RaiN_SДата: Воскресенье, 29 Июля 2012, 16:05:03 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Почему вот это длится на порядок дольше, чем 3 секунды?
Code
          
            loop
               exitwhen a > 10
               set p1 = GetUnitLoc(c)
               set p2 = PolarProjectionBJ(p1, 150.00, ( I2R(a) * 30.00 ))
               call AddSpecialEffectLocBJ( p2, "Abilities\\Weapons\\LavaSpawnMissile\\LavaSpawnMissile.mdl" )
               call DestroyEffect( GetLastCreatedEffectBJ() )
               call RemoveLocation (p2)
               call RemoveLocation (p1)
               call PolledWait( 0.30 )
               set a = a + 1
           endloop

Спасибо.




Сообщение отредактировал RaiN_S - Воскресенье, 29 Июля 2012, 16:05:33
 

kapa6acvlkДата: Воскресенье, 29 Июля 2012, 16:34:58 | Сообщение # 2
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Потому что PolledWait, это вот:
Code
function PolledWait takes real duration returns nothing
     local timer t
     local real  timeRemaining

     if (duration > 0) then
         set t = CreateTimer()
         call TimerStart(t, duration, false, null)
         loop
             set timeRemaining = TimerGetRemaining(t)
             exitwhen timeRemaining <= 0

             // If we have a bit of time left, skip past 10% of the remaining
             // duration instead of checking every interval, to minimize the
             // polling on long waits.
             if (timeRemaining > bj_POLLED_WAIT_SKIP_THRESHOLD) then
                 call TriggerSleepAction(0.1 * timeRemaining)
             else
                 call TriggerSleepAction(bj_POLLED_WAIT_INTERVAL)
             endif
         endloop
         call DestroyTimer(t)
     endif
endfunction


В нем присутствует TriggerSleepAction, а он совершенно не умеет работать в циклах, вплоть до полного убийства потока. Используй таймеры.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

wetalqДата: Понедельник, 30 Июля 2012, 00:23:54 | Сообщение # 3
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
RaiN_S, забудь о такой вещи в джасе вообще, и будет тебя добро
 

RaiN_SДата: Понедельник, 30 Июля 2012, 14:38:03 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Спасибо. :)

Добавлено (30 Июля 2012, 14:38:03)
---------------------------------------------
Можно закрывать.


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz