Следующая строка вызывает утечки, как избавиться от них? По-моему GetUnitsSelectedAll().
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAll(GetTriggerPlayer()))

Принятый ответ

GetUnitsSelectedAll не освобождает хендл, но это не утечка.
С помощью set bj_wantDestroyGroup = true созданная в GetUnitsSelectedAll группа удаляются, но хендл не освобождается. Это не так страшно, но лучше сделать вот так.
globals
    group TempGroup
endglobals

function GetUnitsSelectedAllFixed takes player whichPlayer returns group
    set TempGroup = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(TempGroup, whichPlayer, null)
    return TempGroup
endfunction

...

set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAllFixed(GetTriggerPlayer()))
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
19
5 лет назад
0
8gabriel8, поставил, но утечки все равно остались, хоть их и стало меньше вроде. (Проверял, другие триггеры не влияют)
0
29
5 лет назад
0
KaneThaumaturge, попробуйте так
set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAll(GetTriggerPlayer()))
0
19
5 лет назад
0
NazarPunk, Я уже написал так, но утечки все равно появляются, при этом триггере.
1
26
5 лет назад
1
Наверное, дело в GetUnitSelectedAll.
0
19
5 лет назад
0
8gabriel8, Ладно, оставлю пока так.
0
28
5 лет назад
0
утечки все равно появляются
Откуда такая уверенность?
0
18
5 лет назад
0
Это же конвертация из гуи, верно понимаю?)
Если игровой процесс в твоей карте не занимает больше 20-30 минут и утекает не очень сильно - то тебе не нужно волноваться по поводу каждой утечки
0
29
5 лет назад
0
8gabriel8:
Наверное, дело в GetUnitSelectedAll.
Проморгал я работу с выбором
function GetUnitsSelectedAll takes player whichPlayer returns group
    local group g = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(g, whichPlayer, null)
    return g
endfunction
1
28
5 лет назад
Отредактирован PT153
1
GetUnitsSelectedAll не освобождает хендл, но это не утечка.
С помощью set bj_wantDestroyGroup = true созданная в GetUnitsSelectedAll группа удаляются, но хендл не освобождается. Это не так страшно, но лучше сделать вот так.
globals
    group TempGroup
endglobals

function GetUnitsSelectedAllFixed takes player whichPlayer returns group
    set TempGroup = CreateGroup()
    call SyncSelections()
    call GroupEnumUnitsSelected(TempGroup, whichPlayer, null)
    return TempGroup
endfunction

...

set bj_wantDestroyGroup = true
set udg_InfoPick[GetConvertedPlayerId(GetTriggerPlayer())] = GroupPickRandomUnit(GetUnitsSelectedAllFixed(GetTriggerPlayer()))
Принятый ответ
0
19
5 лет назад
0
PT153, спасибо. Не исправило постоянное появление при пике новых хэндлов, но все же спасибо. Не думаю, что это хоть как-то сможет повлиять на производительность, но просто стараюсь не повторять прошлых ошибок.
0
28
5 лет назад
0
Не исправило постоянное появление при пике новых хэндлов
Для этого можно после set udg_InfoPick... вставить строчку set TempGroup = null, тогда на хендл ничего ссылаться больше не будет и он вскоре будет освобождён. Но TempGroup - глобальная переменная, а потому подразумевается, что она будет часто перезаписываться.
PT153:
но это не утечка
На самом деле, скорее всего, утечкой тут будет сама переменная g, потому что она ссылается куда-то, и из-за этого может быть не удалена.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.