Timing function in C

Discussion in 'C Programming' started by ericunfuk, Mar 9, 2007.

  1. ericunfuk

    ericunfuk Guest

    Dear All...............

    In the following java imp of stop-and-wait protocol, it creates a
    timer, are there any similar functions in C that allows me to do this?

    Thanks in advance.

    //waiting for the ACK message, stop-and-wait , waiting for 10sec
    t = new ACK_timer(10);
    while (true)
    if ( t.timer_out == true )break;

    p_rcv = port_default.recv(false);

    if ( p_rcv == null ) continue;

    len_rcvd = (int)
    p_rcv.getPropertyLong("HEADER_CONTENT_LENGTH", l);
    message_rcv_id = p_rcv. getPropertyLong ("MESSAGE_ID", k);
    //Verify the ACK message
    ( p_rcv.getProperty("HEADER_CONTENT_TYPE","EEE") == "ACK" &&
    message_rcv_id == last_send_msg_id )
    last_ack_msg_id = message_rcv_id ;

    next_send_msg_id = last_ack_msg_id + 1;

    } while (true);

    ericunfuk, Mar 9, 2007
    1. Advertisements

  2. user923005

    user923005 Guest

    >From the C-FAQ:
    19.37: How can I implement a delay, or time a user's response, with
    second resolution?

    A: Unfortunately, there is no portable way. V7 Unix, and derived
    systems, provided a fairly useful ftime() function with
    resolution up to a millisecond, but it has disappeared from
    System V and POSIX. Other routines you might look for on your
    system include clock(), delay(), gettimeofday(), msleep(),
    nap(), napms(), nanosleep(), setitimer(), sleep(), times(), and
    usleep(). (A function called wait(), however, is at least under
    Unix *not* what you want.) The select() and poll() calls (if
    available) can be pressed into service to implement simple
    delays. On MS-DOS machines, it is possible to reprogram the
    system timer and timer interrupts.

    Of these, only clock() is part of the ANSI Standard. The
    difference between two calls to clock() gives elapsed execution
    time, and may even have subsecond resolution, if CLOCKS_PER_SEC
    is greater than 1. However, clock() gives elapsed processor time
    used by the current program, which on a multitasking system may
    differ considerably from real time.

    If you're trying to implement a delay and all you have available
    is a time-reporting function, you can implement a CPU-intensive
    busy-wait, but this is only an option on a single-user, single-
    tasking machine as it is terribly antisocial to any other
    processes. Under a multitasking operating system, be sure to
    use a call which puts your process to sleep for the duration,
    such as sleep() or select(), or pause() in conjunction with
    alarm() or setitimer().

    For really brief delays, it's tempting to use a do-nothing loop

    long int i;
    for(i = 0; i < 1000000; i++)

    but resist this temptation if at all possible! For one thing,
    your carefully-calculated delay loops will stop working properly
    next month when a faster processor comes out. Perhaps worse, a
    clever compiler may notice that the loop does nothing and
    optimize it away completely.

    References: H&S Sec. 18.1 pp. 398-9; PCS Sec. 12 pp. 197-8,215-
    6; POSIX Sec. 4.5.2.
    user923005, Mar 9, 2007
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Vasileios

    timing of a function

    Vasileios, Jan 19, 2004, in forum: C++
    Joe C
    Jan 19, 2004
  2. news.west.cox.net

    timing a function with timeit? (newbie problem)

    news.west.cox.net, Aug 28, 2003, in forum: Python
    Chad Netzer
    Aug 28, 2003
  3. Steven D'Aprano

    Timing a function object versus timeit

    Steven D'Aprano, Nov 4, 2006, in forum: Python
    Steven D'Aprano
    Nov 4, 2006
  4. kevin
  5. mens libertina
    mens libertina
    Jun 19, 2006

Share This Page