Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#2185
Старый 11.04.2016, 11:26
  #2185
^
RedHeavenHero
 
Аватар для RedHeavenHero
📖
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
Регистрация: 10.02.2012
Сообщения: 2378
Выставка наград
По умолчанию
Re: Скрипты

DyrmanЕсть ли скрипт, который определяет, выполняется ли данная функция или уже нет? (без использования флага в самой функции)
Например, есть:
	
for i=1,100 do
startThread(Func);
end

Получается так, что могут запуститься несколько функций Func, даже не смотря на то, что могла бы не завершиться предыдущая.
	
local threads = {}

local startExec = function(func)
	local threads = threads
	errorHook(function()
		%threads[%func] = nil
	end)
	threads[func] = 1
	func()
	threads[func] = nil
end

function startThreadOnce(func)
	if not %threads[func] then
		startThread(%startExec, func)
	end
end

function isFunctionRunning(func)
	return %threads[func]
end

В данном примере startThreadOnce запускает функцию только если она не запущена в данный момент. isFunctionRunning проверяет запущена ли функция в данный момент.
__________________
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
RedHeavenHero вне форума
Ответить с цитированием