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

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

Закрытая тема
 
agentex

offline
Опыт: 34,834
Активность:
Уничтожение потока
Имеется такая связка ф-ий:
Код:
function B takes nothing returns nothing
//тут луп и арифметические действия
if ... then
  //выход
else
  call ExecuteFunc("B")
endif
endfunction

function A takes nothing returns nothing
call ExecuteFunc("B")
endfunction

//функция A выполняется 1 раз
//функция B может выполниться от 1 до нескольких десятков тысяч раз
//итераций лупа в B может быть от 1 до 60

как известно, функция ExecuteFunc создает поток и вызывает в нем функцию которая в скобках. Я провел эксперимент и выяснил, что максимальное число потоков, создаваемое таким образом - 1386, после этого вар крашится. Эту проблему я решил поочередными вызовоми call B() и ExecuteFunc("B"). Но все же интересно - можно ли уничтожить поток когда тебе надо? (в данном случае в конце функции B).
И еще вопрос - сколько максимум вызовов функций можно сделать в 1 потоке до Hit Op Limit'а?
Старый 24.02.2009, 12:50
adic3x

offline
Опыт: 108,439
Активность:
оператор ретунр (который также внегласно ставиться перед ендфункцион) совершает возврат в вызывающуую процедуру, если таковой нет - то поток прекращаеться
для управлением потока из другого потока стоит использовать к примеру глобальную булеану, а в управляемом потоке проверять ее состояние
Старый 24.02.2009, 12:56
agentex

offline
Опыт: 34,834
Активность:
ADOLF то есть в общем виде это выглядит так:
Код:
function B takes nothing returns nothing
call ExecuteFunc("B")
if <некоторая булин> then
return
endif
endfunction
?

agentex добавил:
или лучше сначала завершать поток, а затем создавать новый?

agentex добавил:
а блин ступил, если уничтожиш поток последующие строчки то не выполнятся)
Старый 24.02.2009, 13:05
adic3x

offline
Опыт: 108,439
Активность:
ступил, причем полностью=) в твоем примере ретурн ненужен (я писал что ендфунцтион и есть ретурн), причем внутренний поток будет являться продолжением внешнего просто напросто, там наверное цикл дб?
Старый 24.02.2009, 13:13
agentex

offline
Опыт: 34,834
Активность:
хм, а почему же такой лимит - 1386 этих продолжений? можно вообще отдельный поток создать?
Цитата:
там наверное цикл дб?

втф дб?

agentex добавил:
ну вобщето я разрабатываю систему шифрования чисел
Старый 24.02.2009, 13:18
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
agentex, дб=должно быть. Разрабатываешь систему на основе какой? Могу помочь, если надо =)
Старый 24.02.2009, 13:36
agentex

offline
Опыт: 34,834
Активность:
а ну цикл я показал где, он там один.
Hellfim хм нету никакой основы.. просто надоело юзать чужую CCS и решил сделать свою системку. Впринципе кодер декодер уже готовы, ща думаю как эффективно сжимать равкоды
Старый 24.02.2009, 13:42
NETRAT

offline
Опыт: 83,712
Активность:
бред какой-то, единственная модель, которая позволяет контроллировать потоки в jass, аналогична событийной модели в win api (event, semaphore), то есть только через общую память - глобальные переменные. Другой поток нельзя уничтожить тогда когда тебе это хочется, Адольфег все написал...
Старый 24.02.2009, 13:45
agentex

offline
Опыт: 34,834
Активность:
В таком случае тема подлежит закрытию, только вы на второй вопрос ответьте про хит оп лимит
Старый 24.02.2009, 13:48
NETRAT

offline
Опыт: 83,712
Активность:
проверь... если через call то зависит от содержимого функции, впрочем, не более 8000
если в новом потоке - хз, думаю, что до 20000
Старый 24.02.2009, 13:50
agentex

offline
Опыт: 34,834
Активность:
содержимое довольно скудно - 1 луп и несколько ифов и арифм. действий
Старый 24.02.2009, 13:57
NETRAT

offline
Опыт: 83,712
Активность:
новый поток = новый лимит операций, старый поток = операции добавляются к уже выполненным

посмотри вот это сообщение http://xgm.guru/forum/showpost.php?p=464300&postcount=12 мой личный опыт тестирования лимита, там количество вызовов "пустой" функции ограничивается 150000
Старый 24.02.2009, 14:09
adic3x

offline
Опыт: 108,439
Активность:
выстрелить себе в ногу
жасс: вы пытаетесь получить хендл ноги через рб, но в это время движок завершает процес. в следующий раз при более осторожном вызове рб фции из нового потока вы узнаете что нога уже простреленна движком вара.
Старый 24.02.2009, 14:18
Закрытая тема

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

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

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

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



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