// stop the ticker timer RexxMethod1(int, ticker_stopTimer, POINTER, eventSemHandle) { // just post the event semaphore SysSemaphore *sem = (SysSemaphore *)eventSemHandle; sem->post(); return 0; }
// wait for the ticer timer to trigger RexxMethod3(int, ticker_waitTimer, POINTER, eventSemHandle, wholenumber_t, numdays, wholenumber_t, alarmtime) { SysSemaphore *sem = (SysSemaphore *)eventSemHandle; int msecInADay = 86400000; /* number of milliseconds in a day */ while (numdays > 0) { /* is it some future day? */ // use the semaphore to wait for an entire day. // if this returns true, then this was not a timeout, which // probably means this was cancelled. if (sem->wait(msecInADay)) { /* Check if the alarm is canceled. */ RexxObjectPtr cancelObj = context->GetObjectVariable("CANCELED"); if (cancelObj == context->True()) { // delete the semaphore delete sem; return 0; } else { // just reset the semaphore sem->reset(); } } numdays--; /* Decrement number of days */ } // now we can just wait for the alarm time to expire sem->wait(alarmtime); return 0; }
RexxMethod1(int, alarm_stopTimer, POINTER, eventSemHandle) { SysSemaphore *sev = (SysSemaphore *)eventSemHandle; /* event semaphore handle */ sev->post(); /* Post the event semaphore */ return 0; }