Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


How to create a timer in C that will execute some code when a particular amount of time has elapsed

Posted on 2004-09-19
Medium Priority
Last Modified: 2010-04-15
I was wondering if there is such a function in C that will allow me to enter a time and once that time has elapsed, then execute some code ??
I wish to do something like this

          executing = false;

once the 4 seconds is up I would like the executing flag to be set to false.
I don't know if this is possible but this is what I want to do.
Question by:Broken_Arrow
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
LVL 55

Expert Comment

by:Jaime Olivares
ID: 12098149
you must implement a function like this:

timer(int seconds)
   time_t t;

    for (t= time(NULL); time(NULL)-t > 4000; );

Or if your are using windows environment you can use Sleep(4000);
LVL 22

Expert Comment

ID: 12098260
You can use signal() and alarm() or setitimer() to do this.  do a "man alarm"

LVL 55

Accepted Solution

Jaime Olivares earned 800 total points
ID: 12098326
sorry, about my "timer" function, there is a mistake. I will perfect it:

timer(int seconds)
   time_t   t = time(NULL) + seconds;

   while (time(NULL)<t)  {
       /* do nothing */

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.


Author Comment

ID: 12098341
I was just trying to figure out how it worked. Thanks I will give that a  go

Author Comment

ID: 12098358
Thanks that works perfect
LVL 23

Expert Comment

ID: 12098379
Well, any timer facilities are part of external libraries specific to the environment and not part of the C language
itself, so technically no.

Do you want your program to stop executing and wait until the timer runs out and then

In that case jaime's suggestion of a busy loop would work, but it would also potentially waste a whole
lot of CPU time -- all your program has access to while possibly mpacting system wide performance
(depending on the environment).

Best to instead issue a sleep call, i.e. sleep(4);
on a unix system  #include <unistd.h>

executing = false;

It sounds like you want this to happen in parallel however (while you're program is doing something

in that case you want to setup a signal handler and use alarm() or setitimer as grg99 suggests

You may have a few other options:

 * Store your timers in a list and run the whole program in an event loop, for example
    time running out is just one kind of event that would resume execution to take an action

while ( !quitting )
      event = wait_for_event();
      quitting = react_to_event(event);

 * Or if your code is running inside an active loop and you want the timer to stop the loop by setting
    executing to false... have it periodically check

     while ( executing ) {
              ... next step in your computation ... }

  * Using multi-threaded programming could also achieve this... perhaps you could make a timer thread
     which would halt for at least 4 seconds and then set a shared executing variable to false


Author Comment

ID: 12098543
Could anyone give me some help on setting up signal handler and using alarm(). I have just realised that the busy loop will not work in this case as I do need my program to be able to continue doing something else as Mysidia  pointed out.

LVL 23

Expert Comment

ID: 12098603
In unix... suppose you want to delay for 4 seconds and then send signal SIGALRM

#include <unistd.h>
#include <signal.h>

int timed_executing = true;

void alarm_timer(int signal_num)
      timed_executing = false;

signal(SIGALRM, alarm_timer);  /* <-- register the signal handler to be called when SIGALRM is received */

alarm(4);   /* <-- resets the timer to 4 seconds and starts it */

 /* code to run */

alarm(0);  /* <-- stops the timer without raising the signal */
signal(SIGALRM,  SIG_DFL);  /* <-- de-register the signal handler, setting SIGALRM back to Defaults */


Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question