in reply to Re^3: timer without modules
in thread timer without modules

im just trying to compair for example,
user triggers event at 12:00am, script then refuses another request till say maybe 12:01am

(preferably without halting the entire script because that would more than likely cause the bot to ping out)
i have been messing with using just time() to compair but as i said before *noobish at this*.

Replies are listed 'Best First'.
Re^5: timer without modules
by Corion (Patriarch) on Nov 09, 2009 at 09:25 UTC
Re^5: timer without modules
by Random_Walk (Prior) on Nov 09, 2009 at 15:27 UTC

    time() returns the number of seconds since the epoch. When your function is called check if the value from time() is greater than the previous stored value + 60 seconds. If there is no previous value 0|undef + 60 will certainly be less than time() returns.

    your problem may be more with deciding which data structure you want to use to store these time stamps for each user. A global hash keyed on user name would be the simplest if a little cludgy.

    Cheers,
    R.

    Pereant, qui ante nos nostra dixerunt!

      you know, that is pretty much exactly what i was thinking, and i tested a method like that locally on my pc.. *with nice results*

      the only problem is with how i did it in testing, which was a continuous while loop, this increased my cpu usage from 3-5% to 60%.
      but i figure this has to do with the loop right? also im on windows testing before i move to the shell. *dont wanna make the provider angry lol*

        Just do the test and store the time when the user calls the function.

        # code not tested use strict; use warnings; my %called; my $interval = 60; # how long before they can call it again sub something { my $user = shift; # pass the function the name of the user calling + it my $now = time; return if exists $called{$user} and $now < $called{$user} + $inter +val; $called{user} = $now; # do the costly funtion }

        Cheers,
        R.

        Pereant, qui ante nos nostra dixerunt!