Нормально ли сделать так ?
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)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
Нет, ты два таймера на одну переменную пытаешься запустить
8
Феникс:
Нет, ты два таймера на одну переменную пытаешься запустить
но тот таймер через 10 сек останавливается и нужно запустить еще тот же таймер еще раз и только потом удалить.
15
С технической точки зрения никаких проблем. С практической, не сказать, не зная что это должно быть.
33
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)
Принятый ответ
15
ибо ещё не доказано что в луа сборщик мусора с ними делает
А почему сборщик Луа должен с ним вообще что-то делать? Это внешний объект, порождаемый движком, вне интерпретатора, следовательно, вне его юрисдикции.
33
Таймер и так истёк, и был одноразовым, ссылок на него нет ибо не выделялась переменная а юзалось CreateTimer(), он ничего не делает больше, а сколько он занимает памяти? в килобайтах? 3? разовый таймер на то и разовый, чтобы редко и 1 раз отработать и таким может быть ну около 100 за сессию, и того это у нас 300кб? в 2020 году (го уничтожать), но опять таки мне неизвестно количество памяти, взял с потолка...
15
в 2020 году (го уничтожать), но опять таки мне неизвестно количество памяти, взял с потолка...
В этом ты прав. Это некрасиво, нагадить объектами и не почистить, но не смертельно. Даже с учетом ссылки на функцию некоторого размера, которую этот таймер не позволит сборщику утилизировать. У нас в целом всегда проблема была не столько из-за объектов, сколько из-за ссылок на них (вечным обнулением переменных).
Так что да, это некрасиво, грубо, фу-фу-фу, но не смертельно.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.