Timer in C (like in Java)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Alexander Mahone

    Timer in C (like in Java)

    Hello, I need a facility in C, like a set of functions, to manage a
    timer: I should be able to initialize it with a certain period of time
    (like x msec), start it, and every x msec it should execute a certain
    function. In a few words, I need something like the java.util.Timer
    class, but for C (of course not a class).
    Do you know of any implementation of something like that (if possible
    real-time)?
    Thanks a lot
  • Keith Thompson

    #2
    Re: Timer in C (like in Java)

    Alexander Mahone <salvodanilogiu ffrida@gmail.co mwrites:
    Hello, I need a facility in C, like a set of functions, to manage a
    timer: I should be able to initialize it with a certain period of time
    (like x msec), start it, and every x msec it should execute a certain
    function. In a few words, I need something like the java.util.Timer
    class, but for C (of course not a class).
    Do you know of any implementation of something like that (if possible
    real-time)?
    Not in standard C. Try a newsgroup that deals with your operating
    system.

    --
    Keith Thompson (The_Other_Keit h) <kst-u@mib.org>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

    Comment

    • santosh

      #3
      Re: Timer in C (like in Java)

      Alexander Mahone wrote:
      Hello, I need a facility in C, like a set of functions, to manage a
      timer: I should be able to initialize it with a certain period of time
      (like x msec), start it, and every x msec it should execute a certain
      function. In a few words, I need something like the java.util.Timer
      class, but for C (of course not a class).
      Do you know of any implementation of something like that (if possible
      real-time)?
      Thanks a lot
      Standard C has no facilities for what you want to do. However POSIX
      specifies ualarm() and setitimer() for interrupting a process after a
      specified period. A signal handler can then call your function.

      <http://www.mkssoftware .com/docs/man3/ualarm.3.asp>
      <http://www.mkssoftware .com/docs/man3/setitimer.3.asp >

      Comment

      • Walter Roberson

        #4
        Re: Timer in C (like in Java)

        In article <funo2n$pu$1@re gistered.motzar ella.org>,
        santosh <santosh.k83@gm ail.comwrote:
        >Standard C has no facilities for what you want to do. However POSIX
        >specifies ualarm() and setitimer() for interrupting a process after a
        >specified period. A signal handler can then call your function.
        Neither function was part of POSIX.1-1990.

        ualarm() was added to POSIX as of Issue 4, Version 2, and moved from
        X/OPEN UNIX extension to BASE of of issue 5 (which I think was 2002.)
        As of issue 6 (2004), ualarm() is marked obsolescent.


        setitimer() was also added and moved at the same issues as for ualarm(),
        but setitimer() is not marked obsolescent.


        For information about what the -recommended- POSIX timer functions are
        and their various trade-offs, a unix programming newsgroup should
        be consulted.
        --
        "Walter exemplified class." -- Paul Tagliabue

        Comment

        • santosh

          #5
          Re: Timer in C (like in Java)

          Walter Roberson wrote:
          In article <funo2n$pu$1@re gistered.motzar ella.org>,
          santosh <santosh.k83@gm ail.comwrote:
          >
          >>Standard C has no facilities for what you want to do. However POSIX
          >>specifies ualarm() and setitimer() for interrupting a process after a
          >>specified period. A signal handler can then call your function.
          >
          Neither function was part of POSIX.1-1990.
          >
          ualarm() was added to POSIX as of Issue 4, Version 2, and moved from
          X/OPEN UNIX extension to BASE of of issue 5 (which I think was 2002.)
          As of issue 6 (2004), ualarm() is marked obsolescent.

          >
          setitimer() was also added and moved at the same issues as for
          ualarm(), but setitimer() is not marked obsolescent.

          >
          For information about what the -recommended- POSIX timer functions are
          and their various trade-offs, a unix programming newsgroup should
          be consulted.
          You're right. Apologies to the OP for mentioning an obsolescent
          function.

          Comment

          • Anonymous

            #6
            Re: Timer in C (like in Java)

            On Wed, 23 Apr 2008 21:58:05 +0530, santosh wrote:
            Standard C has no facilities for what you want to do. However POSIX
            specifies ualarm() and setitimer() for interrupting a process after a
            specified period. A signal handler can then call your function.
            Only if you're really careful. Only some functions are safe to call in a
            signal handler, or functions called from a signal handler. your system's
            'man 7 signal()' should give you a list of safe functions to call from a
            signal handler.

            A unix newsgroup should give more information.

            Comment

            • jon

              #7
              Re: Timer in C (like in Java)

              there is a simple timer, but it works on the same process (which means
              that the program will stop till the timer is done):

              sleep(int amount_of_milli seconds);

              in windows programing there are ways to create a separate process to
              control the timer:

              here is a link to a msdn site:



              (if it doesn't work, try searching (on the same page) for timers and
              windows)

              // Set two timers.

              SetTimer(hwnd, // handle to main window
              IDT_TIMER1, // timer identifier
              10000, // 10-second interval
              (TIMERPROC) NULL); // no timer callback

              SetTimer(hwnd, // handle to main window
              IDT_TIMER2, // timer identifier
              300000, // five-minute interval
              (TIMERPROC) NULL); // no timer callback

              Comment

              • Walter Roberson

                #8
                Re: Timer in C (like in Java)

                In article <3bbbf964-da49-4e1c-9066-4b15716e2c1e@2g 2000hsn.googleg roups.com>,
                jon <jmshahen@hotma il.comwrote:
                >there is a simple timer, but it works on the same process (which means
                >that the program will stop till the timer is done):
                >sleep(int amount_of_milli seconds);
                sleep() is not part of standard C. It is a common operating system
                extension, but the original poster did not specify an OS.
                --
                "Allegories are in the realm of thoughts, what ruins are in
                the realm of things." -- Walter Benjamin

                Comment

                • Keith Thompson

                  #9
                  Re: Timer in C (like in Java)

                  roberson@ibd.nr c-cnrc.gc.ca (Walter Roberson) writes:
                  In article <3bbbf964-da49-4e1c-9066-4b15716e2c1e@2g 2000hsn.googleg roups.com>,
                  jon <jmshahen@hotma il.comwrote:
                  >>there is a simple timer, but it works on the same process (which means
                  >>that the program will stop till the timer is done):
                  >
                  >>sleep(int amount_of_milli seconds);
                  >
                  sleep() is not part of standard C. It is a common operating system
                  extension, but the original poster did not specify an OS.
                  Furthermore, it's defined differently on different systems. On POSIX
                  systems, for example, the argument is a number of seconds.

                  --
                  Keith Thompson (The_Other_Keit h) <kst-u@mib.org>
                  Nokia
                  "We must do something. This is something. Therefore, we must do this."
                  -- Antony Jay and Jonathan Lynn, "Yes Minister"

                  Comment

                  • Antoninus Twink

                    #10
                    Re: Timer in C (like in Java)

                    On 23 Apr 2008 at 22:34, Keith Thompson wrote:
                    roberson@ibd.nr c-cnrc.gc.ca (Walter Roberson) writes:
                    >sleep() is not part of standard C. It is a common operating system
                    >extension, but the original poster did not specify an OS.
                    >
                    Furthermore, it's defined differently on different systems. On POSIX
                    systems, for example, the argument is a number of seconds.
                    You're right, but there are also usleep and nanosleep, for shorter
                    intervals.

                    Comment

                    • santosh

                      #11
                      Re: Timer in C (like in Java)

                      Antoninus Twink wrote:
                      On 23 Apr 2008 at 22:34, Keith Thompson wrote:
                      >roberson@ibd.nr c-cnrc.gc.ca (Walter Roberson) writes:
                      >>sleep() is not part of standard C. It is a common operating system
                      >>extension, but the original poster did not specify an OS.
                      >>
                      >Furthermore, it's defined differently on different systems. On POSIX
                      >systems, for example, the argument is a number of seconds.
                      >
                      You're right, but there are also usleep and nanosleep, for shorter
                      intervals.
                      I think the OP wants something that will interrupt the program
                      periodically. I think some versions of nanosleep will do this, but as
                      Walter Roberson has rightly observed, the OP is better of consulting in
                      a platform specific group. His best bet might be setitimer/getitimer or
                      the timer_* group of functions.

                      Comment

                      • Antoninus Twink

                        #12
                        Re: Timer in C (like in Java)

                        On 24 Apr 2008 at 19:17, santosh wrote:
                        Antoninus Twink wrote:
                        >You're right, but there are also usleep and nanosleep, for shorter
                        >intervals.
                        >
                        I think the OP wants something that will interrupt the program
                        periodically. I think some versions of nanosleep will do this
                        [snip]
                        His best bet might be setitimer/getitimer or the timer_* group of
                        functions.
                        Oops, sorry, I lost sight of what the OP had asked amidst all the
                        bluster.

                        Yes, setitimer should be just the ticket.

                        Comment

                        • Alexander Mahone

                          #13
                          Re: Timer in C (like in Java)

                          On 24 Apr, 22:08, Antoninus Twink <nos...@nospam. invalidwrote:
                          On 24 Apr 2008 at 19:17, santosh wrote:
                          >
                          Antoninus Twink wrote:
                          You're right, but there are also usleep and nanosleep, for shorter
                          intervals.
                          >
                          I think the OP wants something that will interrupt the program
                          periodically. I think some versions of nanosleep will do this
                          [snip]
                          His best bet might be setitimer/getitimer or the timer_* group of
                          functions.
                          >
                          Oops, sorry, I lost sight of what the OP had asked amidst all the
                          bluster.
                          >
                          Yes, setitimer should be just the ticket.
                          OK, I read various documentation on the Internet, but I think neither
                          ualarm() or setitimer() satisfy me completely. What I need to do, in
                          fact, is create a series of different timers, like timer objects, each
                          one referrable, with some kind of reference (a pointer or any other
                          way to refer to it in the future). Then, under certain conditions, I
                          need to reset one or more of them (that's why I need some way to refer
                          to every single timer specificly), to prevent them sending the
                          SIGALARM.
                          From what I've read, both ualarm() and setitimer() (the first of based
                          on the second) allows you to manage one single global timer, the one
                          of the caller process...
                          So, in my opinion (correct me if I'm wrong, my knownledge of C is
                          quite limited) the only 2 ways to do this would be:
                          1 - Create a series of threads, one for each timer I want to create,
                          and inside each thread call ualarm()...Or maybe I'd need to create
                          child processes, instead of threads?
                          2 - Use a series of timer_create(), without the need to create any per-
                          timer thread...
                          Is there a simpler and more lightweight way to do this?
                          Thanks a lot

                          Comment

                          • santosh

                            #14
                            Re: Timer in C (like in Java)

                            Alexander Mahone wrote:
                            On 24 Apr, 22:08, Antoninus Twink <nos...@nospam. invalidwrote:
                            >On 24 Apr 2008 at 19:17, santosh wrote:
                            >>
                            Antoninus Twink wrote:
                            >You're right, but there are also usleep and nanosleep, for shorter
                            >intervals.
                            >>
                            I think the OP wants something that will interrupt the program
                            periodically. I think some versions of nanosleep will do this
                            >[snip]
                            His best bet might be setitimer/getitimer or the timer_* group of
                            functions.
                            >>
                            >Oops, sorry, I lost sight of what the OP had asked amidst all the
                            >bluster.
                            >>
                            >Yes, setitimer should be just the ticket.
                            >
                            OK, I read various documentation on the Internet, but I think neither
                            ualarm() or setitimer() satisfy me completely. What I need to do, in
                            fact, is create a series of different timers, like timer objects, each
                            one referrable, with some kind of reference (a pointer or any other
                            way to refer to it in the future). Then, under certain conditions, I
                            need to reset one or more of them (that's why I need some way to refer
                            to every single timer specificly), to prevent them sending the
                            SIGALARM.
                            From what I've read, both ualarm() and setitimer() (the first of based
                            on the second) allows you to manage one single global timer, the one
                            of the caller process...
                            So, in my opinion (correct me if I'm wrong, my knownledge of C is
                            quite limited) the only 2 ways to do this would be:
                            1 - Create a series of threads, one for each timer I want to create,
                            and inside each thread call ualarm()...Or maybe I'd need to create
                            child processes, instead of threads?
                            2 - Use a series of timer_create(), without the need to create any
                            per- timer thread...
                            Is there a simpler and more lightweight way to do this?
                            Thanks a lot
                            Please ask this <news:comp.unix .programmerwher e you will surely
                            receive much better responses than here. Standard C has no facilities
                            for creating timers.

                            Comment

                            • Antoninus Twink

                              #15
                              Re: Timer in C (like in Java)

                              On 28 Apr 2008 at 13:21, Alexander Mahone wrote:
                              OK, I read various documentation on the Internet, but I think neither
                              ualarm() or setitimer() satisfy me completely. What I need to do, in
                              fact, is create a series of different timers, like timer objects, each
                              one referrable, with some kind of reference (a pointer or any other
                              way to refer to it in the future). Then, under certain conditions, I
                              need to reset one or more of them (that's why I need some way to refer
                              to every single timer specificly), to prevent them sending the
                              SIGALARM.
                              From what I've read, both ualarm() and setitimer() (the first of based
                              on the second) allows you to manage one single global timer, the one
                              of the caller process...
                              Well, you can squeeze out three, producing the different signals
                              SIGALRM, SIGVTALRM and SIGPROF, but yes, there's a strictly limited
                              number of timers available to each process.

                              The usual way around this is to implement multiple timers by hand: set
                              up an ordered queue of timers, and as one expires initialize the next
                              one along.

                              Of course, that's a pain, and so people have already done it and put it
                              into libraries for you to use - a good one is libevent
                              (http://monkey.org/~provos/libevent/).

                              Comment

                              Working...