00001 #ifndef __J2K__TimerSignal_CPP__
00002 #define __J2K__TimerSignal_CPP__
00003
00004 #include <j2k/nto/TimerSignal.hpp>
00005 #include <j2k/nto/fixprio.hpp>
00006
00007 TimerSignal* TimerSignal::theTimer = NULL;
00008
00009
00010 TimerSignal::TimerSignal( ULONG nsec, ULONG sec )
00011 {
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 event.sigev_priority = getprio( 0 );
00025
00026 event.sigev_notify = SIGEV_SIGNAL;
00027 event.sigev_signo = TimerSignalEvent;
00028
00029
00030
00031
00032
00033 if ( timer_create( CLOCK_REALTIME, &event, &timer_id ) == -1 )
00034 {
00035 MC_OnError( errno, Error, "while creating a timer." )
00036 }
00037
00038 struct sigaction act;
00039 sigset_t set_event;
00040
00041 sigemptyset( &set_event );
00042 sigaddset( &set_event, TimerSignalEvent );
00043
00044
00045 act.sa_flags = 0;
00046 act.sa_mask = set_event;
00047 act.sa_handler = wrapper;
00048
00049 sigaction( TimerSignalEvent, &act, NULL );
00050
00051 set( nsec, sec );
00052 }
00053
00054
00055 void TimerSignal::set( ULONG nsec, ULONG sec )
00056 {
00057 t.it_value.tv_nsec = nsec;
00058 t.it_interval.tv_nsec = nsec;
00059
00060 t.it_value.tv_sec = sec;
00061 t.it_interval.tv_sec = sec;
00062
00063 timer_settime( timer_id, 0, &t, NULL );
00064 }
00065
00066 #endif