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

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

Ответ
 
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Повторная инициализация хэш-таблицы
По тупой привычке я инициализирую одинаковые хэш-таблицы в каждом связанном с ними триггере, вот как в первом посте этой темы:
http://xgm.guru/forum/showthread.php?t=50991
Что от тупой привычки надо избавляться - другой вопрос.
А вопрос по теме такой. Может ли это (повторная инициализация уже инициализированной хэш-таблицы) вызывать краши?
Старый 07.10.2011, 01:14
Doc

offline
Опыт: 63,163
Активность:
Достаточно одной таблицы на всю карту.
+Есть лимит таблиц.
Старый 07.10.2011, 02:07
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Цитата:
Сообщение от Doc
Есть лимит таблиц.

Но я-то инициализирую ту же самую, т.е. он не превышается?
Старый 07.10.2011, 03:01
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Ты создаёшь новую
Старый 07.10.2011, 13:30
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
((код jass
udg_Hash=InitHashtable()
))
это означает не инициализацию одной и той же хеш-таблицы, а запись в эту же переменную новой
Старый 07.10.2011, 13:53
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Doc
Достаточно одной таблицы на всю карту.
+Есть лимит таблиц.



Эм, тут я бы поспорил, чем больше данных в хт, тем меньше быстродействие(что очевидно), по этому в целях экономии процессорного времени хорошо бы хотя бы для каждой предметной области выделять свою таблицу.
Старый 07.10.2011, 14:32
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
А можно подсказать, каков лимит? По-быстрому поиском не нашёл, а долго искать сейчас нет времени =(

И верно ли я понимаю, что если у триггера код наподобие этого, то хэш-таблица конкретно в этом коде инициализируется всё-таки всего один раз, а не каждый при вызове триггера?

Код:
function DestroyEffect2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local effect e=LoadEffectHandle(udg_Hash,GetHandleId(t),4)
set udg_se = e
call DestroyEffect( udg_se )
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
set t=null
set e=null
endfunction

function Trig_destroyspeceffect_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local effect e = GetLastCreatedEffectBJ()
    call SaveEffectHandle(udg_Hash,GetHandleId(t),4,e)
    call TimerStart(t,2,false,function DestroyEffect2)
    set t=null
    set e=null
endfunction

//===========================================================================
function InitTrig_destroyspeceffect takes nothing returns nothing
    set gg_trg_destroyspeceffect = CreateTrigger(  )
    set udg_Hash=InitHashtable()
    call TriggerAddAction( gg_trg_destroyspeceffect, function Trig_destroyspeceffect_Actions )
endfunction
Старый 07.10.2011, 14:39
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
короче 1 раз инициализируй и все.
Старый 07.10.2011, 14:40
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Цитата:
Сообщение от Faion
короче 1 раз инициализируй и все.

ок, обработаю потом код, но что с ответом на вопросы?
Старый 07.10.2011, 14:46
Elf_Stratigo

offline
Опыт: 4,699
Активность:
Faion:
чем больше данных в хт, тем меньше быстродействие(что очевидно)
нет, это не так, доступ к данным хештаблиц оценивается О(1) и не зависит от размера хеш-таблицы

Отредактировано Elf_Stratigo, 07.10.2011 в 16:59.
Старый 07.10.2011, 16:50
Ответ

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

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

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

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



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