By liran bh | 5/16/2016 | Linux User Space

POSIX Timers

#include <sys/time.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <errno.h>
 
#define LOOP_LIMIT  1E12
 
volatile int sigcount=0;
 
void catcher( int sig ) {
 
    struct itimerval value;
    int which = ITIMER_REAL;
 
    printf( "Signal catcher called for signal %d\n", sig );
    sigcount++;
 
    if( sigcount > 10 ) {
 
        /*
         * Disable the real time interval timer
         */
 
        getitimer( which, &value );
 
        value.it_value.tv_sec = 0;
        value.it_value.tv_usec = 0;
 
        setitimer( which, &value, NULL );
    }
}
 
int main( int argc, char *argv[] ) {
 
    int result = 0;
 
    struct itimerval value, ovalue, pvalue;
    int which = ITIMER_REAL;
 
    struct sigaction sact;
    volatile double count;
    time_t t;
 
    sigemptyset( &sact.sa_mask );
    sact.sa_flags = 0;
    sact.sa_handler = catcher;
    sigaction( SIGALRM, &sact, NULL );
 
    getitimer( which, &pvalue );
 
    /*
     * Set a real time interval timer to repeat every 200 milliseconds
     */
 
    value.it_interval.tv_sec = 0;        /* Zero seconds */
    value.it_interval.tv_usec = 500000;  /* Two hundred milliseconds */
    value.it_value.tv_sec = 0;           /* Zero seconds */
    value.it_value.tv_usec = 500000;     /* Five hundred milliseconds */
 
    result = setitimer( which, &value, &ovalue );
 
    /*
     * The interval timer value returned by setitimer() should be
     * identical to the timer value returned by getitimer().
     */
 
    if( ovalue.it_interval.tv_sec != pvalue.it_interval.tv_sec  ||
        ovalue.it_interval.tv_usec != pvalue.it_interval.tv_usec ||
        ovalue.it_value.tv_sec != pvalue.it_value.tv_sec ||
        ovalue.it_value.tv_usec != pvalue.it_value.tv_usec ) {
        printf( "Real time interval timer mismatch\n" );
        result = -1;
    }
 
    time( &t );
    printf( "Before loop, time is %s", ctime(&t) );
 
    for( count=0; ((count<LOOP_LIMIT) && (sigcount<10)); count++ );
 
    time( &t );
    printf( "After loop, time is %s\n", ctime(&t) );
 
    if( sigcount == 0 )
        printf( "The signal catcher never gained control\n" );
    else
        printf( "The signal catcher gained control\n" );
 
    printf( "The value of count is %.0f\n", count );
 
    return( result );
}

{{CommentsModel.TotalCount}} Comments

Your Comment

{{CommentsModel.Message}}

Recent Stories

Top DiscoverSDK Experts

User photo
3355
Ashton Torrence
Web and Windows developer
GUI | Web and 11 more
View Profile
User photo
3220
Mendy Bennett
Experienced with Ad network & Ad servers.
Mobile | Ad Networks and 1 more
View Profile
User photo
3060
Karen Fitzgerald
7 years in Cross-Platform development.
Mobile | Cross Platform Frameworks
View Profile
Show All
X

Compare Products

Select up to three two products to compare by clicking on the compare icon () of each product.

{{compareToolModel.Error}}

Now comparing:

{{product.ProductName | createSubstring:25}} X
Compare Now