예제 #1
0
// stop the ticker timer
RexxMethod1(int, ticker_stopTimer, POINTER, eventSemHandle)
{
    // just post the event semaphore
    SysSemaphore *sem = (SysSemaphore *)eventSemHandle;
    sem->post();
    return 0;
}
예제 #2
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;
}
예제 #3
0
RexxMethod1(int, alarm_stopTimer, POINTER, eventSemHandle)
{
    SysSemaphore *sev = (SysSemaphore *)eventSemHandle;    /* event semaphore handle            */
    sev->post();                         /* Post the event semaphore          */
    return 0;
}