Простой вопрос по хэш-таблице
Допустим, сохраняю я в хэш примерно так:
call SaveUnitHandle (udg_Hash,GetHandleId(t5),2,u5)
call TimerStart (t5, 0.01, true, function ManaInside)
А в функции ManaInside достаю t5 уже, например, как t:
local timer t = GetExpiredTimer()
local unit u5 = LoadUnitHandle(udg_Hash, GetHandleId(t),2)
При очистке
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
все же везде корректно очистится?

Лучший ответ:
ClotPh, это локалка. Нет вообще никакой разницы как ты ее назовешь. Должен скопетанить ©, ибо опасаюсь что ирония Дока может быть не замечена.



Просмотров: 361

» Лучшие комментарии


XGM Bot #1 - 8 месяцев назад 0
Похожие вопросы:

» ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.

GF RaiseD #2 - 8 месяцев назад 2
ClotPh, сначала чистишь, потом удаляешь таймер. Еще не уверен необходимо ли паузить таймер. Вроде как - можно сразу удалять. Хеш - не самый производительный способ ассоциировать группы данных.
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
// Нужно так
ClotPh #3 - 8 месяцев назад 0
Главный вопрос был про то, не возникнет ли проблем из-за того, что t5 поменялось на t.
GF RaiseD, "сначала чистишь, потом удаляешь таймер" - в чем разница?! Постоянно делалось наоборот и проблем не замечалось, утечка все же есть?
JaBeN_Симфер #4 - 8 месяцев назад 1
А что может чиститься по хендлу удаленного объекта?
Doc #5 - 8 месяцев назад 6
Конечно возникнет. А вот если на t6 поменяешь то не будет. А если на superTimer то наоборот всё еще лучше станет. Главное не называть переменные таймеры без буквы t, а то вообще всё сломается.
ClotPh #6 - 8 месяцев назад 0
Doc, о как, ну теперь буду знать.
Короче, ятп так: проблем из-за "смены номера" нет, но вначале флушить, потом таймер рушить. Всем спасибо.
GF RaiseD #7 - 8 месяцев назад (отредактировано ) 0

ClotPh, это локалка. Нет вообще никакой разницы как ты ее назовешь. Должен скопетанить ©, ибо опасаюсь что ирония Дока может быть не замечена.
ClotPh #8 - 8 месяцев назад 0
GF RaiseD, ну пока еще была замечена.
Вообще ппц на самом деле, потому что у меня везде вначале дестройтаймер, потом флуш. Но, значит, утекает там не так уж сильно, потому что серьезного снижения производительности не замечалось, хотя таймеров не мало. Ладно, на будущее мб разборки тогда.
GF RaiseD #9 - 8 месяцев назад 0
» Можешь проверить
library HandleCounter initializer Initialization

   globals
      leaderboard HandleBoard
   endglobals
   
   function HandleCounter_Update takes nothing returns nothing
      
      local integer i = 0
      local integer id
      local location array P
      local real result=0
      
      loop
      exitwhen i >= 50
         set i = i + 1
         set P[i] = Location(0,0)
         set id = GetHandleId(P[i])
         set result = result + (id-0x100000)
      endloop
      set result = result/i-i/2
      loop
          call RemoveLocation(P[i])
          set P[i] = null
          exitwhen i <= 1
          set i = i - 1
      endloop
      call LeaderboardSetItemValue(HandleBoard,0,R2I(result))
   
   endfunction


   function HandleCounter_Actions takes nothing returns nothing
       
      set HandleBoard = CreateLeaderboard()
      call LeaderboardSetLabel(HandleBoard, "Handle Counter")
      call PlayerSetLeaderboard(GetLocalPlayer(),HandleBoard)
      call LeaderboardDisplay(HandleBoard,true)
      call LeaderboardAddItem(HandleBoard,"Handles",0,Player(0))
      call LeaderboardSetSizeByItemCount(HandleBoard,1)
      call HandleCounter_Update()
      call TimerStart(GetExpiredTimer(),0.05,true,function HandleCounter_Update)

   endfunction

function Initialization takes nothing returns nothing

        call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
        
endfunction

endlibrary
Это закинь в любое место
Steal nerves #10 - 8 месяцев назад (отредактировано ) 2
Doc, если бы локалку целочисленную объявил в начале и засунул хэндл, то можно было менять местами как хочешь? это можно проверить, сохранить что-нибудь в хэше и потом проверить дебагом
» код
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
//и потом мог бы и вот так
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,id)
set t = null
7 комментариев удалено
Doc #18 - 8 месяцев назад 0
Да конечно в такой ситуации будет все ок. Просто поменять действия местами обычно проще.
EnergyFrost #19 - 8 месяцев назад 0
ClotPh, ну а вопрос кто будет закрывать?