libUPnP  1.6.17
TimerThread.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002  *
00003  * Copyright (c) 2000-2003 Intel Corporation 
00004  * All rights reserved. 
00005  *
00006  * Redistribution and use in source and binary forms, with or without 
00007  * modification, are permitted provided that the following conditions are met: 
00008  *
00009  * * Redistributions of source code must retain the above copyright notice, 
00010  * this list of conditions and the following disclaimer. 
00011  * * Redistributions in binary form must reproduce the above copyright notice, 
00012  * this list of conditions and the following disclaimer in the documentation 
00013  * and/or other materials provided with the distribution. 
00014  * * Neither name of Intel Corporation nor the names of its contributors 
00015  * may be used to endorse or promote products derived from this software 
00016  * without specific prior written permission.
00017  * 
00018  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00019  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
00020  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
00021  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR 
00022  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00023  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00024  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
00025  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
00026  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00027  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
00028  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00029  *
00030  ******************************************************************************/
00031 
00032 #ifndef TIMERTHREAD_H
00033 #define TIMERTHREAD_H
00034 
00039 #include "FreeList.h"
00040 #include "ithread.h"
00041 #include "LinkedList.h"
00042 #include "ThreadPool.h"
00043 
00044 #ifdef __cplusplus
00045 extern "C" {
00046 #endif
00047 
00048 #define INVALID_EVENT_ID (-10 & 1<<29)
00049 
00051 typedef enum timeoutType {
00053         ABS_SEC,
00055         REL_SEC
00056 } TimeoutType;
00057 
00067 typedef struct TIMERTHREAD
00068 {
00069         ithread_mutex_t mutex;
00070         ithread_cond_t condition;
00071         int lastEventId;
00072         LinkedList eventQ;
00073         int shutdown;
00074         FreeList freeEvents;
00075         ThreadPool *tp;
00076 } TimerThread;
00077 
00083 typedef struct TIMEREVENT
00084 {
00085         ThreadPoolJob job;
00087         time_t eventTime;
00089         Duration persistent;
00090         int id;
00091 } TimerEvent;
00092 
00099 int TimerThreadInit(
00101         TimerThread *timer,
00104         ThreadPool *tp);
00105 
00112 int TimerThreadSchedule(
00114         TimerThread* timer,
00117         time_t time, 
00120         TimeoutType type,
00122         ThreadPoolJob *job,
00124         Duration duration,
00126         int *id);
00127 
00135 int TimerThreadRemove(
00137         TimerThread *timer,
00139         int id,
00141         ThreadPoolJob *out);
00142 
00152 int TimerThreadShutdown(
00154         TimerThread *timer);
00155 
00156 #ifdef __cplusplus
00157 }
00158 #endif
00159 
00160 #endif /* TIMER_THREAD_H */
00161