XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Рекурсивная функция
nothing mymain (integer i) 
{
        mymain (i)
}
если вызвать эту функцию, она будет воспроизводится, пока не остановить каким-либо образом, так?
[+] замечание от Doc: Название темы.
Старый 01.01.2012, 12:49
MyRtZ

offline
Опыт: 6,530
Активность:
Амбидекстрия:
nothing mymain (integer i) 
{
        mymain (i)
}
если вызвать эту функцию, она будет воспроизводится, пока не остановить каким-либо образом, так?
Да, избежать это можно так:
   define{
      MAX_LOUNCH_COUNT = 25
   }
   
   integer LIMIT = 0
   
   nothing mymain (integer i){
      LIMIT = LIMIT + 1

      if (LIMIT > MAX_LOUNCH_COUNT) then
         return
      endif

      mymain (i)
   }
Старый 01.01.2012, 13:17
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
MyRtZ:
nothing mymain (integer i){
LIMIT = LIMIT + 1
if (LIMIT > MAX_LOUNCH_COUNT) then
return
endif
mymain (i)
}
ты мне показал как её остановить, да?
Старый 01.01.2012, 13:19
MyRtZ

offline
Опыт: 6,530
Активность:
Амбидекстрия:
ты мне показал как её остановить, да?
Догодайся, бесконечный вызов приведет к фаталу, если не будет стоять лимита такого рода
Старый 01.01.2012, 13:20
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
MyRtZ, я сделал вызов функции в первом посте, и ничего фатала невижу
Старый 01.01.2012, 13:21
MyRtZ

offline
Опыт: 6,530
Активность:
Амбидекстрия:
MyRtZ, я сделал вызов функции в первом посте, и ничего фатала невижу
Значит поток просто оборвался
Старый 01.01.2012, 13:21
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
т.е. я понял, что ты показал, но вроде вызов этой функции к фаталу не привёл у меня.
Старый 01.01.2012, 13:22
RoStap

offline
Опыт: 281
Активность:
потому что это дезинфа, произойдет остановка потока только и всего.
Старый 01.01.2012, 13:22
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
щас проверю
Старый 01.01.2012, 13:22
MyRtZ

offline
Опыт: 6,530
Активность:
Амбидекстрия:
щас проверю
В ранних версиях варкрафта был фатал, можешь проверить сколько поток продержался:
   integer test = 0 //потом выводим значение на экран
   
   nothing mymain (integer i){
      test = test + 1
      mymain (i)
   }
Старый 01.01.2012, 13:24
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
Так, смотрите
nothing mymain (integer i) 
{
    LOL= LOL+1  //LOL-глобальная целочисленная, равная одному
    BJDebugMsg(I2S(LOL))    
    mymain (i)
}
Запустил игру,(событие в функции запуске mymain - elapsed game time is 0.02 seconds) и у меня на экране были числа, последнее из которых-811, значит, функция запустилась 810 раз?
Амбидекстрия добавил:
MyRtZ, невидел твой пост, но сделал почти так же)
Старый 01.01.2012, 13:31
MyRtZ

offline
Опыт: 6,530
Активность:
Амбидекстрия:
Запустил игру,(событие в функции запуске mymain - elapsed game time is 0.02 seconds) и у меня на экране были числа, последнее из которых-811, значит, функция запустилась 810 раз?
Получается что так, функция запустилась 810 раз.
Имей ввиду что момент обрыва потока наступает тогда, когда поток перегружен (исключение - функции инициалицазии карты(function main)).
Я к тому, что если ты уберешь BJDebugMsg из функции, то она продержится в двесятки(а то и сотни) раз больше, чем с ним
Также на загруженность влияет длинна названия функций, которые запускаются в потоке)

Отредактировано MyRtZ, 01.01.2012 в 13:40.
Старый 01.01.2012, 13:35
Амбидекстрия
Silenced by ScorpioT1000
offline
Опыт: 8,237
Активность:
MyRtZ:
Я к тому, что если ты уберешь BJDebugMsg из функции, то она продержится в двесятки раз больше, чем с ним
убрал из функции дебагмсг, поставил чтобы через 10 сек после начала игры показало значение LOL
запустил, подождал 10сек и увидел на экране 30000
Амбидекстрия добавил:
так теперь сделал событие, чтобы если игрок написал в чат lol то показало бы значение LOL, запустиил, сколько не пишу - 30000, значит выполнение обрывается на 30000, можно клозать
Старый 01.01.2012, 13:42
Doc

offline
Опыт: 63,163
Активность:
void test(){
	ExecuteFunc("test")
}
Старый 01.01.2012, 15:12
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:36.