#ifndef MRT_WIN_NT_ALARM_H_
#define MRT_WIN_NT_ALARM_H_
#define _MT // neeed in win nt for multithreaded
#include <process.h>
#include <stdio.h>
#include <assert.h>
#include <signal.h>
#include <windows.h>
#include <tchar.h>
/*******************************************************************
Windows does not support SIGALRM. SIGTERM exists but is never used
therefore we typedef SIGTERM to be SIGALRM and then raise a SIGALRM
whenever the timer fires, signal.c has an callback routine that is
called when we get a SIGALRM signal
*******************************************************************/
#ifndef SIGALRM
#define SIGALRM SIGTERM
#endif
static UINT Timer_result;
static BOOL alarm_on = FALSE;
VOID CALLBACK Alarm_callback__(HWND hWnd, UINT uMsg, UINT idEven, DWORD dwTime)
{
int n;
alarm_interrupt ();
//return;
//if (alarm_on == TRUE)
//raise(SIGALRM);
if ((n = KillTimer(NULL, Timer_result)) == 0) {
printf("KillTimer failed in mrt_win_NT_alarm.h (%d) %d %s\n", Timer_result, GetLastError(), strerror("fail"));
//exit(0);
}
return;
}
unsigned int alarm(unsigned int seconds)
{
UINT idEvent = 0;
DWORD ret = 0;
//assert(seconds > 0);
if (seconds <= 0)
{
alarm_on = FALSE;
return ret;
}
alarm_on = TRUE;
Timer_result = SetTimer(NULL, 0, seconds * 1000 /*# of mSec*/, (TIMERPROC )Alarm_callback__);
// Timer creation has failed
assert (0 != Timer_result);
//{
// printf("Timer creation has failed\n");
//exit(0);
//}
return ret;
}
#endif
syntax highlighted by Code2HTML, v. 0.9.1