/*
* Demonstrate how to set up a timer that, on expiry,
* sends us a pulse. This example sets the first
* expiry to 1.5 seconds and the repetition interval
* to 1.5 seconds.
*/
#include <stdio.h>
#include <time.h>
#include <sys/netmgr.h>
#include <sys/neutrino.h>
#include <unistd.h>
#define MY_PULSE_CODE _PULSE_CODE_MINAVAIL
#define BILLION 1000000000L;
typedef union {
struct _pulse pulse;
/* your other message structures would go
here too */
} my_message_t;
void do_every_timer_1(int i)
{
printf("i am one\n");
}
void do_every_timer_5(int i)
{
struct timespec start, stop;
double accum;
printf("i am five\n");
return;
if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
perror( "clock gettime" );
return;
}
//do work
/*if(i == 3){
sleep(3);
}*/
if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
perror( "clock gettime" );
return;
}
accum = ( stop.tv_sec - start.tv_sec )
+ (double)( stop.tv_nsec - start.tv_nsec )
/ (double)BILLION;
printf( "%dnd time:start time %d stop time %d cost time %lf\n",i,
start.tv_sec, stop.tv_sec, accum );
}
int main(int argc, char *argv[])
{
struct sigevent event, event2;
struct itimerspec itime, itime2;
timer_t timer_id, timer_id2;
int chid;
int rcvid;
my_message_t msg;
int i = 0;
chid = ChannelCreate(0);
//first timer
event.sigev_notify = SIGEV_PULSE;
event.sigev_coid = ConnectAttach(ND_LOCAL_NODE, 0,
chid,
_NTO_SIDE_CHANNEL, 0);
event.sigev_priority = getprio(0);
event.sigev_code = MY_PULSE_CODE;
SIGEV_PULSE_INIT(&event, event.sigev_coid, SIGEV_PULSE_PRIO_INHERIT, 0, 5);
timer_create(CLOCK_REALTIME, &event, &timer_id);
itime.it_value.tv_sec = 5;
itime.it_value.tv_nsec = 0;
itime.it_interval.tv_sec = 5;
itime.it_interval.tv_nsec = 0;
//second timer
event2.sigev_notify = SIGEV_PULSE;
event2.sigev_coid = ConnectAttach(ND_LOCAL_NODE, 0,
chid,
_NTO_SIDE_CHANNEL, 0);
event2.sigev_priority = getprio(0);
event2.sigev_code = MY_PULSE_CODE;
SIGEV_PULSE_INIT(&event2, event2.sigev_coid, SIGEV_PULSE_PRIO_INHERIT, 0, 1);
timer_create(CLOCK_REALTIME, &event2, &timer_id2);
itime2.it_value.tv_sec = 1;
itime2.it_value.tv_nsec = 0;
itime2.it_interval.tv_sec = 1;
itime2.it_interval.tv_nsec = 0;
//set timer start
timer_settime(timer_id, 0, &itime, NULL);
timer_settime(timer_id2, 0, &itime2, NULL);
/*
* As of the timer_settime(), we will receive our pulse
* in 1.5 seconds (the itime.it_value) and every 1.5
* seconds thereafter (the itime.it_interval)
*/
for (;;) {
rcvid = MsgReceive(chid, &msg, sizeof(msg), NULL);
if (rcvid == 0) { /* we got a pulse */
if (msg.pulse.code == MY_PULSE_CODE) {
printf("pulse value %d\n", msg.pulse.value.sival_int);
if(msg.pulse.value.sival_int == 5)
do_every_timer_5(i);
if(msg.pulse.value.sival_int == 1)
do_every_timer_1(i);
i++;
} /* else other pulses ... */
} /* else other messages ... */
}
}
QNX中定时器用法demo
猜你喜欢
转载自blog.csdn.net/b0207191/article/details/91348553
今日推荐
周排行