This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Script run prevention
#1
Hello all, how i could prevent to run event script if it is already in process? 
thank you
Reply
#2
See this example: https://forum.logicmachine.net/showthrea...2#pid16762
Change the timeout from 5 seconds to 0.1
Reply
#3
(30.05.2022, 06:38)admin Wrote: See this example: https://forum.logicmachine.net/showthrea...2#pid16762
Change the timeout from 5 seconds to 0.1

thanks for advice. it seams that semaphore doesn't starts even with simple code below i receiving log error* arg: 
Code:
require('sem')
stat, err = sem.runlocked('eventlock', 0.1, function(lockres)
  
end)

if stat then
  log('ok')
else
  log('error', err)
end
Reply
#4
stat, err are assigned to what the function returns. Since your function does not return anything stat and err are nil and you get empty "error" entry in Logs.

Use this example and put your actual script code inside of the scriptfn function. In the current state this example will simply block execution of any other instances of the same script for 10 seconds. It will also propagate any errors from scriptfn so they are visible in the Error log.
Code:
require('sem')

function scriptfn()
  log('script start')
  os.sleep(10)
  log('script end')
end

stat, err = sem.runlocked('eventlock', 0.1, function(lockres)
  if lockres then
    return pcall(scriptfn)
  else
    return nil, 'lock failed'
  end
end)

if not stat then
  error(err)
end
Reply


Forum Jump: