📄 wdtqnx.c
字号:
/***************************************************************** * * * wdtqnx.c * * * * This file is a part of the eXtremeDB-HA Application Framework * * It demonstrates McObject High Availabitity support and * * explains how to work with it. * * * ***************************************************************** * Copyright (c) 2001-2006 McObject LLC * * All Rights Reserved * *****************************************************************//* * ++ * * PROJECT: Ha Framework * * SUBSYSTEM: HA support * * MODULE: wdtqnx.c * * ABSTRACT: WATCHDOG asynchron processing procedures for HA support * * * VERSION: 1.0 * * HISTORY: * 1.0- 1 SS 19-Oct-2003 Created it was * * -- */#ifdef _QNX#include <stdlib.h>#ifndef _WIN32_WCE #include <stdio.h>#endif#ifdef _WIN32 #define _WIN32_WINNT 0x0500 #define WIN32_LEAN_AND_MEAN #include <windows.h> #ifndef _WIN32_WCE #include <time.h> #endif#else #include <sys/time.h> #include <signal.h> #include <time.h> #ifdef _QNX #include <sys/siginfo.h> #endif#endif#include "watchdog.h" #ifndef _QNXint mco_create_watchdog( long msec, MCO_PWATCHDOG proc){ struct sigaction sa; struct itimerval time; sa.sa_handler = (void (*) (int))proc; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask,SIGPIPE); sigaction( SIGALRM, &sa, NULL); time.it_interval.tv_sec = msec/1000; time.it_interval.tv_usec = (msec%1000)*1000;// time.it_value.tv_sec = time.it_interval.tv_sec; time.it_value.tv_usec = time.it_interval.tv_usec; return setitimer( ITIMER_REAL, &time, NULL );}void mco_kill_watchdog( long msec, MCO_PWATCHDOG proc){ struct itimerval time; time.it_interval.tv_sec = 0; time.it_interval.tv_usec = 0;// time.it_value.tv_sec = 0; time.it_value.tv_usec = 0; setitimer( ITIMER_REAL, &time, NULL );} #else //ifndef _QNXstatic timer_t timerid; int mco_create_watchdog( long msec, MCO_PWATCHDOG proc){ struct sigaction sa; struct itimerspec time; static struct sigevent evt; int rc; sa.sa_handler = (void (*) (int))proc; sa.sa_flags = 0; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask,SIGPIPE); sigaction( SIGALRM, &sa, NULL); SIGEV_SIGNAL_INIT( &evt, SIGALRM); if(( rc = timer_create( CLOCK_REALTIME, &evt, &timerid ))<0) return rc; time.it_interval.tv_sec = msec/1000; time.it_interval.tv_nsec = (msec%1000)*10000;// time.it_value.tv_sec = time.it_interval.tv_sec; time.it_value.tv_nsec = time.it_interval.tv_nsec; return timer_settime( timerid, 0, &time, NULL );}void mco_kill_watchdog( long msec, MCO_PWATCHDOG proc){ struct itimerspec time; time.it_interval.tv_sec = 0; time.it_interval.tv_nsec = 0;// time.it_value.tv_sec = 0; time.it_value.tv_nsec = 0; timer_settime( timerid, 0, &time, NULL );} #endif#endif /* _QNX */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -