Допустим, сохраняю я в хэш примерно так:
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, это локалка. Нет вообще никакой разницы как ты ее назовешь. Должен скопетанить ©, ибо опасаюсь что ирония Дока может быть не замечена.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
21
7 лет назад
2
ClotPh, сначала чистишь, потом удаляешь таймер. Еще не уверен необходимо ли паузить таймер. Вроде как - можно сразу удалять. Хеш - не самый производительный способ ассоциировать группы данных.
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
// Нужно так
0
21
7 лет назад
0
Главный вопрос был про то, не возникнет ли проблем из-за того, что t5 поменялось на t.
GF RaiseD, "сначала чистишь, потом удаляешь таймер" - в чем разница?! Постоянно делалось наоборот и проблем не замечалось, утечка все же есть?
1
21
7 лет назад
1
А что может чиститься по хендлу удаленного объекта?
6
29
7 лет назад
6
Конечно возникнет. А вот если на t6 поменяешь то не будет. А если на superTimer то наоборот всё еще лучше станет. Главное не называть переменные таймеры без буквы t, а то вообще всё сломается.
0
21
7 лет назад
0
Doc, о как, ну теперь буду знать.
Короче, ятп так: проблем из-за "смены номера" нет, но вначале флушить, потом таймер рушить. Всем спасибо.
0
21
7 лет назад
Отредактирован Raised
0
ClotPh, это локалка. Нет вообще никакой разницы как ты ее назовешь. Должен скопетанить ©, ибо опасаюсь что ирония Дока может быть не замечена.
Принятый ответ
0
21
7 лет назад
0
GF RaiseD, ну пока еще была замечена.
Вообще ппц на самом деле, потому что у меня везде вначале дестройтаймер, потом флуш. Но, значит, утекает там не так уж сильно, потому что серьезного снижения производительности не замечалось, хотя таймеров не мало. Ладно, на будущее мб разборки тогда.
0
21
7 лет назад
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
Это закинь в любое место
2
27
7 лет назад
Отредактирован MpW
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
2 комментария удалено
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.