예제 #1
0
mtimer_t *_mtimer_ustart( int32_t usec, 
                          void    (*callback)(void *user),
                          void    *user)
{
    mtimer_t *n,*walk,*last;

    n = alloc_t(mtimer_t);
    n->expiration.tv_usec = g_tnow.tv_usec+usec;
    n->expiration.tv_sec = g_tnow.tv_sec;
    n->callback = callback;
    n->user = user;
    while (n->expiration.tv_usec > 1000000) {
        n->expiration.tv_usec -= 1000000;
        n->expiration.tv_sec++;
    }
    last = NULL;
    for (walk = timers; walk; walk = walk->next)
        if (walk->expiration.tv_sec > n->expiration.tv_sec ||
          (walk->expiration.tv_sec == n->expiration.tv_sec &&
          walk->expiration.tv_usec > n->expiration.tv_usec)) break;
        else last = walk;
    if (walk) 
        Q_INSERT_BEFORE(timers,n,walk);
    else 
        Q_INSERT_AFTER(timers,n,last);
    return n;
}
예제 #2
0
mtimer_t *_mtimer_start( int32_t  sec,
                         void     (*callback)(void *arg),
                         void     *arg )
{
    mtimer_t *n, *walk, *last;

    n = alloc_t(mtimer_t);
    n->expiration.tv_usec = g_tnow.tv_usec;
    n->expiration.tv_sec  = g_tnow.tv_sec + sec;
    n->callback = callback;
    n->user = arg;

    last = NULL;
    for (walk = timers; walk; walk = walk->next)
        if (walk->expiration.tv_sec > n->expiration.tv_sec ||
            (walk->expiration.tv_sec == n->expiration.tv_sec &&
             walk->expiration.tv_usec > n->expiration.tv_usec)) break;
        else last = walk;
    if (walk) 
        Q_INSERT_BEFORE(timers,n,walk);
    else 
        Q_INSERT_AFTER(timers,n,last);
    return n;
}
예제 #3
0
void queue_put(QUEUE *q,BUFFER *b)
{
    Q_INSERT_AFTER(q->first,b,q->last);
    q->last = b;
}