//------------------------------------------------------------------- // myitimer.cpp // // programmer: ALLAN CRUSE // date begun: 16 SEP 2004 //------------------------------------------------------------------- #include // for printf() #include // for signal() #include // for setitimer() int signaled = 0; // global variable void on_alarm( int signum ) { signaled = 1; } // signal handler int main( int argc, char **argv ) { //---------------------------- // install our interval-timer //---------------------------- struct itimerval ourit, oldit; // specify the initial delay ourit.it_value.tv_sec = 1; ourit.it_value.tv_usec = 0; // specify the periodic delay ourit.it_interval.tv_sec = 0; ourit.it_interval.tv_usec = 1000000; // replace the default itimer setitimer( ITIMER_REAL, &ourit, &oldit ); //---------------------------- // install our signal-handler //---------------------------- signal( SIGALRM, on_alarm ); //--------------------------------------------- // reset the terminal (this clears the screen) //--------------------------------------------- printf( "\ec" ); //----------------------------------------------------- // prints another line each time 'SIGALRM' is received //----------------------------------------------------- int letter = 'A', count = 0; do { if ( !signaled ) continue; else ++count; signaled = 0; printf( "%20s", " " ); for (int i = 0; i < 40; i++) printf( "%c", letter ); printf( "\n" ); if ( letter == 'Z' ) letter = 'A'; else ++letter; } while ( count < 52 ); //---------------------------------------------------- // restore original interval-timer and signal-handler //---------------------------------------------------- setitimer( ITIMER_REAL, &oldit, NULL ); signal( SIGALRM, SIG_DFL ); printf( "\n" ); }