Нормально ли сделать так ?
local t=CreateTimer()
TimerStart(t,10,false,function()
	TimerStart(t,10,false,function()
		DestroyTimer(t)
	end)
end)

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

local t=CreateTimer()
TimerStart(t,10,false,function()
	TimerStart(CreateTimer(),10,false,function()
		DestroyTimer(t)
		DestroyTimer(GetExpiredTimer())
	end)
end)
Но я вообще чаще забиваю болт огромный на уничтожение одноразовых таймеров, ибо ещё не доказано что в луа сборщик мусора с ними делает
и просто делаю так, но ты так не делай
TimerStart(CreateTimer(),10,false,function()
	TimerStart(CreateTimer(),10,false,function()
		print("'это сообщение будет показано через 20 секунд")
	end)
end)

или вообще вот так чтобы точно ничего не потерять
local t=CreateTimer()
TimerStart(t,10,false,function()
	local t2=CreateTimer()
	TimerStart(t2,10,false,function()
		DestroyTimer(t)
		DestroyTimer(t2)
	end)
end)
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
27
4 года назад
0
Нет, ты два таймера на одну переменную пытаешься запустить
0
8
4 года назад
0
Феникс:
Нет, ты два таймера на одну переменную пытаешься запустить
но тот таймер через 10 сек останавливается и нужно запустить еще тот же таймер еще раз и только потом удалить.
0
17
4 года назад
0
С технической точки зрения никаких проблем. С практической, не сказать, не зная что это должно быть.
0
32
4 года назад
Отредактирован Берги
0
local t=CreateTimer()
TimerStart(t,10,false,function()
	TimerStart(CreateTimer(),10,false,function()
		DestroyTimer(t)
		DestroyTimer(GetExpiredTimer())
	end)
end)
Но я вообще чаще забиваю болт огромный на уничтожение одноразовых таймеров, ибо ещё не доказано что в луа сборщик мусора с ними делает
и просто делаю так, но ты так не делай
TimerStart(CreateTimer(),10,false,function()
	TimerStart(CreateTimer(),10,false,function()
		print("'это сообщение будет показано через 20 секунд")
	end)
end)

или вообще вот так чтобы точно ничего не потерять
local t=CreateTimer()
TimerStart(t,10,false,function()
	local t2=CreateTimer()
	TimerStart(t2,10,false,function()
		DestroyTimer(t)
		DestroyTimer(t2)
	end)
end)
Принятый ответ
0
17
4 года назад
Отредактирован GetLocalPlayer
0
ибо ещё не доказано что в луа сборщик мусора с ними делает
А почему сборщик Луа должен с ним вообще что-то делать? Это внешний объект, порождаемый движком, вне интерпретатора, следовательно, вне его юрисдикции.
1
32
4 года назад
1
Таймер и так истёк, и был одноразовым, ссылок на него нет ибо не выделялась переменная а юзалось CreateTimer(), он ничего не делает больше, а сколько он занимает памяти? в килобайтах? 3? разовый таймер на то и разовый, чтобы редко и 1 раз отработать и таким может быть ну около 100 за сессию, и того это у нас 300кб? в 2020 году (го уничтожать), но опять таки мне неизвестно количество памяти, взял с потолка...
2
17
4 года назад
Отредактирован GetLocalPlayer
2
в 2020 году (го уничтожать), но опять таки мне неизвестно количество памяти, взял с потолка...
В этом ты прав. Это некрасиво, нагадить объектами и не почистить, но не смертельно. Даже с учетом ссылки на функцию некоторого размера, которую этот таймер не позволит сборщику утилизировать. У нас в целом всегда проблема была не столько из-за объектов, сколько из-за ссылок на них (вечным обнулением переменных).
Так что да, это некрасиво, грубо, фу-фу-фу, но не смертельно.
0
23
4 года назад
0
измени TimerStart на свой и лови переодичность: false то заносят в таблицу и ждет завершение уничтожить таймер это можно делать обертку итог будет
TimerStart(CreateTimer(), 10, false, function())
TimerStart(CreateTimer(), 10, false, function())
end)
end)
Без каких либо изврашенцев

то есть
do
local original = TimerStart
function TimerStart(a,b,c,d)
if c == false then
-- Создаем таблицу на уничтожение при завершение и заменяем параметр обертку функции чтоб уничтожить таймер D
end
original(a,b,c,d)
end
end

Можно без таблицы а просто делать обертку функции если равен false то автоматически уничтожить
Чтобы оставить комментарий, пожалуйста, войдите на сайт.