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

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

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

offline
Опыт: 43,833
Активность:
Прерывание потоков & limit op
камрады, я тут подумал... что будет в случае использования такой ф-ии
Код:
function itemtrg takes nothing returns boolean
local integer q=8192
local integer w=0
local integer array e
local integer r=0
loop
exitwhen q==w
set w=GetRandomInt(0,255)*32
set e[r]=w
set r=r+1
endloop
return q==w
endfunction

сабж, два вопроса
1) что мы получим запустив эту функцию (я не прошу булин ретурн, что будет с варкрафтом =))
2) какое можно найти этому применение?

Sasha добавил:
итак...?

Отредактировано Sasha, 02.10.2008 в 14:11.
Старый 02.10.2008, 14:14
J
expert
offline
Опыт: 48,747
Активность:
вроде как поток должен грохнется из-за отстутствия выхода из цыкла
Старый 02.10.2008, 14:28
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
  1. вар прибьет поток после некоторого количества итераций
  2. никакого? :хз:
Старый 02.10.2008, 14:29
S

offline
Опыт: 43,833
Активность:
а если размер массива превысит 8192?
п.с. грохнетса только отдельный поток? Или всё-таки этому можно найти какое-либо применение чтобы грохнуть все потоки?

Sasha добавил:
и еще - как грохнуть все потоки? Функцию в студию пожалуйста
Старый 02.10.2008, 14:31
J
expert
offline
Опыт: 48,747
Активность:
Цитата:
а если размер массива превысит 8192?

всеравно грохнется поток
Цитата:
грохнетса только отдельный поток? Или всё-таки этому можно найти какое-либо применение чтобы грохнуть все потоки?

вроде как отдельный только
Старый 02.10.2008, 14:32
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
у меня прерывается после 776й итерации, так что массив не переполняется

Van Damm добавил:
Код:
function Crash takes nothing returns nothing
   call ExecuteFunc("Crash")
endfunction

xD
Старый 02.10.2008, 14:46
S

offline
Опыт: 43,833
Активность:
это уже давно известно :P
мне интересно как грохнуть все потоки, желательно полностью... о_О
Старый 02.10.2008, 14:51
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
крашить каждый поток отдельно, вроде иначе никак
Старый 02.10.2008, 15:47
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Цитата:
Сообщение от Sasha
мне интересно как грохнуть все потоки, желательно полностью... о_О

Все и полностью не получится, иначе была бы пустая карта.
Не проще ли сразу попросить war сделать access violation?
Кстати:
Код:
globals
  integer i = 0
endglobals

function optest takes nothing returns nothing
  set i = 0
  loop
    set i = i + 1
  endloop
endfunction

Если запустить функцию optest, то i примет значение 42857. При добавлении exitwhen false в цикл i примет значение 33333 =) При более сложных условиях выхода и увеличении кол-ва выполняемых циклом действий - еще меньше.

Имхо, это требует отдельной темы =)

ShadoW DaemoN добавил:
done
Старый 02.10.2008, 16:52
NETRAT

offline
Опыт: 83,762
Активность:
а если убрать из функции
Код:
set i = 0
как изменится значение?

вы что лимит операций обсуждаете?
Старый 02.10.2008, 16:56
akkolt

offline
Опыт: 13,826
Активность:
ну если убрать *32, то можно рандомить по ргб

Отредактировано akkolt, 02.10.2008 в 17:22.
Старый 02.10.2008, 17:06
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
NETRAT, никак, это не стоит в цикле => без разницы.
Про лимит операций я так, "кстати, к слову" добавил.

akkolt, ага, экстренный выход из цикла без выполнения действий после него. >_<

За раз грохнуть "все" потоки не получится, по крайней мере, лично я не знаю такого метода.
Старый 02.10.2008, 17:21
NETRAT

offline
Опыт: 83,762
Активность:
ShadoW DaemoN с чего это вдруг без разницы? присвоение что уже не операция?
Старый 02.10.2008, 17:23
akkolt

offline
Опыт: 13,826
Активность:
Цитата:
ну если убрать *32, то можно рандомить по ргб

Сразу отвечаю на вопрос как: создать системку... Для опытного жассера не так уж и сложно.

akkolt добавил:
а кстати, это натолкнуло меня на мысль, что можно отслеживать прекращение цикла в одном триггере из другого. Мб об этом уже знали, но для меня это новость )

akkolt добавил:
А еще это геморный метод сравнивания интежеров ^_^

Простите, может и ересь несу.

Отредактировано akkolt, 02.10.2008 в 17:50.
Старый 02.10.2008, 17:31
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
NETRAT, хмм) хотя да, ты прав, изменится - уменьшится на 1 =) Если вставить перед циклом call BJDebugMsg(I2S(i)), то i = 42805... Вообще, интересная тема)
Старый 02.10.2008, 17:38
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Лимит операций уже обсуждался здесь года так четыре назад. Тогда еще Зибада тесты делал
Старый 02.10.2008, 17:44
S

offline
Опыт: 43,833
Активность:
ссыль в студию тогда...
а какое значение i примет если поставить exitwhen false == true и наоборот?
Старый 02.10.2008, 19:38
ScorpioT1000
Работаем
offline
Опыт: отключен
даг просто exitwhen false
Старый 02.10.2008, 20:00
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
как бы зачем такая тупость, если можно просто не писать exitwhen
Старый 02.10.2008, 20:01
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Тестовый код в руки и вперед тестить свои варианты:
Код:
globals
  integer i = 0
endglobals

function optest takes nothing returns nothing
  // писать отсебятину можно тут
  loop
    // ...и тут
    set i = i + 1
  endloop
endfunction

function output takes nothing returns nothing
  call BJDebugMsg(I2S(i))
endfunction

function InitTrig_test takes nothing returns nothing
  call TimerStart(CreateTimer(), 0., false, function optest)
  call TimerStart(CreateTimer(), 1., false, function output)
  // здесь ^^^^ увеличить время периода, если требуется
endfunction
Старый 02.10.2008, 20:44
Закрытая тема

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

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

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

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



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