#include <BasicUsageEnvironment0.hh>
Inheritance diagram for BasicTaskScheduler0:


Public Types | |
| typedef void | BackgroundHandlerProc (void *clientData, int mask) |
Public Member Functions | |
| virtual | ~BasicTaskScheduler0 () |
| virtual void | SingleStep (unsigned maxDelayTime=0)=0 |
| virtual TaskToken | scheduleDelayedTask (int64_t microseconds, TaskFunc *proc, void *clientData) |
| virtual void | unscheduleDelayedTask (TaskToken &prevTask) |
| virtual void | doEventLoop (char *watchVariable) |
| virtual EventTriggerId | createEventTrigger (TaskFunc *eventHandlerProc) |
| virtual void | deleteEventTrigger (EventTriggerId eventTriggerId) |
| virtual void | triggerEvent (EventTriggerId eventTriggerId, void *clientData=NULL) |
| virtual void | rescheduleDelayedTask (TaskToken &task, int64_t microseconds, TaskFunc *proc, void *clientData) |
| virtual void | setBackgroundHandling (int socketNum, int conditionSet, BackgroundHandlerProc *handlerProc, void *clientData)=0 |
| void | disableBackgroundHandling (int socketNum) |
| virtual void | moveSocketHandling (int oldSocketNum, int newSocketNum)=0 |
| void | turnOnBackgroundReadHandling (int socketNum, BackgroundHandlerProc *handlerProc, void *clientData) |
| void | turnOffBackgroundReadHandling (int socketNum) |
| virtual void | internalError () |
Protected Member Functions | |
| BasicTaskScheduler0 () | |
Protected Attributes | |
| DelayQueue | fDelayQueue |
| HandlerSet * | fHandlers |
| int | fLastHandledSocketNum |
| EventTriggerId | fTriggersAwaitingHandling |
| EventTriggerId | fLastUsedTriggerMask |
| TaskFunc * | fTriggeredEventHandlers [MAX_NUM_EVENT_TRIGGERS] |
| void * | fTriggeredEventClientDatas [MAX_NUM_EVENT_TRIGGERS] |
| unsigned | fLastUsedTriggerNum |
Definition at line 74 of file BasicUsageEnvironment0.hh.
typedef void TaskScheduler::BackgroundHandlerProc(void *clientData, int mask) [inherited] |
Definition at line 128 of file UsageEnvironment.hh.
| BasicTaskScheduler0::~BasicTaskScheduler0 | ( | ) | [virtual] |
Definition at line 55 of file BasicTaskScheduler0.cpp.
References fHandlers.
00055 { 00056 delete fHandlers; 00057 }
| BasicTaskScheduler0::BasicTaskScheduler0 | ( | ) | [protected] |
Definition at line 46 of file BasicTaskScheduler0.cpp.
References fHandlers, fTriggeredEventClientDatas, fTriggeredEventHandlers, MAX_NUM_EVENT_TRIGGERS, and NULL.
00047 : fLastHandledSocketNum(-1), fTriggersAwaitingHandling(0), fLastUsedTriggerMask(1), fLastUsedTriggerNum(MAX_NUM_EVENT_TRIGGERS-1) { 00048 fHandlers = new HandlerSet; 00049 for (unsigned i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i) { 00050 fTriggeredEventHandlers[i] = NULL; 00051 fTriggeredEventClientDatas[i] = NULL; 00052 } 00053 }
| virtual void BasicTaskScheduler0::SingleStep | ( | unsigned | maxDelayTime = 0 |
) | [pure virtual] |
| TaskToken BasicTaskScheduler0::scheduleDelayedTask | ( | int64_t | microseconds, | |
| TaskFunc * | proc, | |||
| void * | clientData | |||
| ) | [virtual] |
Implements TaskScheduler.
Definition at line 59 of file BasicTaskScheduler0.cpp.
References DelayQueue::addEntry(), fDelayQueue, and DelayQueueEntry::token().
00061 { 00062 if (microseconds < 0) microseconds = 0; 00063 DelayInterval timeToDelay((long)(microseconds/1000000), (long)(microseconds%1000000)); 00064 AlarmHandler* alarmHandler = new AlarmHandler(proc, clientData, timeToDelay); 00065 fDelayQueue.addEntry(alarmHandler); 00066 00067 return (void*)(alarmHandler->token()); 00068 }
| void BasicTaskScheduler0::unscheduleDelayedTask | ( | TaskToken & | prevTask | ) | [virtual] |
Implements TaskScheduler.
Definition at line 70 of file BasicTaskScheduler0.cpp.
References fDelayQueue, NULL, and DelayQueue::removeEntry().
00070 { 00071 DelayQueueEntry* alarmHandler = fDelayQueue.removeEntry((intptr_t)prevTask); 00072 prevTask = NULL; 00073 delete alarmHandler; 00074 }
| void BasicTaskScheduler0::doEventLoop | ( | char * | watchVariable | ) | [virtual] |
Implements TaskScheduler.
Definition at line 76 of file BasicTaskScheduler0.cpp.
References NULL, and SingleStep().
00076 { 00077 // Repeatedly loop, handling readble sockets and timed events: 00078 while (1) { 00079 if (watchVariable != NULL && *watchVariable != 0) break; 00080 SingleStep(); 00081 } 00082 }
| EventTriggerId BasicTaskScheduler0::createEventTrigger | ( | TaskFunc * | eventHandlerProc | ) | [virtual] |
Implements TaskScheduler.
Definition at line 84 of file BasicTaskScheduler0.cpp.
References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggeredEventHandlers, MAX_NUM_EVENT_TRIGGERS, and NULL.
00084 { 00085 unsigned i = fLastUsedTriggerNum; 00086 EventTriggerId mask = fLastUsedTriggerMask; 00087 00088 do { 00089 i = (i+1)%MAX_NUM_EVENT_TRIGGERS; 00090 mask >>= 1; 00091 if (mask == 0) mask = 0x80000000; 00092 00093 if (fTriggeredEventHandlers[i] == NULL) { 00094 // This trigger number is free; use it: 00095 fTriggeredEventHandlers[i] = eventHandlerProc; 00096 fTriggeredEventClientDatas[i] = NULL; // sanity 00097 00098 fLastUsedTriggerMask = mask; 00099 fLastUsedTriggerNum = i; 00100 00101 return mask; 00102 } 00103 } while (i != fLastUsedTriggerNum); 00104 00105 // All available event triggers are allocated; return 0 instead: 00106 return 0; 00107 }
| void BasicTaskScheduler0::deleteEventTrigger | ( | EventTriggerId | eventTriggerId | ) | [virtual] |
Implements TaskScheduler.
Definition at line 109 of file BasicTaskScheduler0.cpp.
References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggeredEventHandlers, fTriggersAwaitingHandling, MAX_NUM_EVENT_TRIGGERS, and NULL.
00109 { 00110 fTriggersAwaitingHandling &=~ eventTriggerId; 00111 00112 if (eventTriggerId == fLastUsedTriggerMask) { // common-case optimization: 00113 fTriggeredEventHandlers[fLastUsedTriggerNum] = NULL; 00114 fTriggeredEventClientDatas[fLastUsedTriggerNum] = NULL; 00115 } else { 00116 // "eventTriggerId" should have just one bit set. 00117 // However, we do the reasonable thing if the user happened to 'or' together two or more "EventTriggerId"s: 00118 EventTriggerId mask = 0x80000000; 00119 for (unsigned i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i) { 00120 if ((eventTriggerId&mask) != 0) { 00121 fTriggeredEventHandlers[i] = NULL; 00122 fTriggeredEventClientDatas[i] = NULL; 00123 } 00124 mask >>= 1; 00125 } 00126 } 00127 }
| void BasicTaskScheduler0::triggerEvent | ( | EventTriggerId | eventTriggerId, | |
| void * | clientData = NULL | |||
| ) | [virtual] |
Implements TaskScheduler.
Definition at line 129 of file BasicTaskScheduler0.cpp.
References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggersAwaitingHandling, and MAX_NUM_EVENT_TRIGGERS.
00129 { 00130 // First, record the "clientData": 00131 if (eventTriggerId == fLastUsedTriggerMask) { // common-case optimization: 00132 fTriggeredEventClientDatas[fLastUsedTriggerNum] = clientData; 00133 } else { 00134 EventTriggerId mask = 0x80000000; 00135 for (unsigned i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i) { 00136 if ((eventTriggerId&mask) != 0) { 00137 fTriggeredEventClientDatas[i] = clientData; 00138 00139 fLastUsedTriggerMask = mask; 00140 fLastUsedTriggerNum = i; 00141 } 00142 mask >>= 1; 00143 } 00144 } 00145 00146 // Then, note this event as being ready to be handled. 00147 // (Note that because this function (unlike others in the library) can be called from an external thread, we do this last, to 00148 // reduce the risk of a race condition.) 00149 fTriggersAwaitingHandling |= eventTriggerId; 00150 }
| void TaskScheduler::rescheduleDelayedTask | ( | TaskToken & | task, | |
| int64_t | microseconds, | |||
| TaskFunc * | proc, | |||
| void * | clientData | |||
| ) | [virtual, inherited] |
Definition at line 46 of file UsageEnvironment.cpp.
References TaskScheduler::scheduleDelayedTask(), and TaskScheduler::unscheduleDelayedTask().
Referenced by RTSPServer::RTSPClientSession::noteLiveness().
00048 { 00049 unscheduleDelayedTask(task); 00050 task = scheduleDelayedTask(microseconds, proc, clientData); 00051 }
| virtual void TaskScheduler::setBackgroundHandling | ( | int | socketNum, | |
| int | conditionSet, | |||
| BackgroundHandlerProc * | handlerProc, | |||
| void * | clientData | |||
| ) | [pure virtual, inherited] |
| void TaskScheduler::disableBackgroundHandling | ( | int | socketNum | ) | [inline, inherited] |
Definition at line 135 of file UsageEnvironment.hh.
References NULL, and TaskScheduler::setBackgroundHandling().
Referenced by RTSPClient::connectionHandler1(), RTSPClient::resetTCPSockets(), TCPStreamSink::socketWritableHandler1(), and TaskScheduler::turnOffBackgroundReadHandling().
00135 { setBackgroundHandling(socketNum, 0, NULL, NULL); }
| virtual void TaskScheduler::moveSocketHandling | ( | int | oldSocketNum, | |
| int | newSocketNum | |||
| ) | [pure virtual, inherited] |
| void TaskScheduler::turnOnBackgroundReadHandling | ( | int | socketNum, | |
| BackgroundHandlerProc * | handlerProc, | |||
| void * | clientData | |||
| ) | [inline, inherited] |
Definition at line 155 of file UsageEnvironment.hh.
References TaskScheduler::setBackgroundHandling(), and SOCKET_READABLE.
Referenced by RTSPServer::RTSPClientSession::changeClientInputSocket(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), SIPClient::invite1(), RTSPServer::RTSPClientSession::RTSPClientSession(), RTSPServer::RTSPServer(), and RTSPServer::setUpTunnelingOverHTTP().
00155 { 00156 setBackgroundHandling(socketNum, SOCKET_READABLE, handlerProc, clientData); 00157 }
| void TaskScheduler::turnOffBackgroundReadHandling | ( | int | socketNum | ) | [inline, inherited] |
Definition at line 158 of file UsageEnvironment.hh.
References TaskScheduler::disableBackgroundHandling().
Referenced by RTCPInstance::addStreamSocket(), RTSPServer::RTSPClientSession::changeClientInputSocket(), Socket::changePort(), RTSPServer::RTSPClientSession::closeSockets(), SocketDescriptor::deregisterRTPInterface(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SIPClient::invite1(), RTPInterface::stopNetworkReading(), SocketDescriptor::tcpReadHandler1(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), and RTSPServer::~RTSPServer().
00158 { disableBackgroundHandling(socketNum); }
| void TaskScheduler::internalError | ( | ) | [virtual, inherited] |
DelayQueue BasicTaskScheduler0::fDelayQueue [protected] |
Definition at line 100 of file BasicUsageEnvironment0.hh.
Referenced by scheduleDelayedTask(), BasicTaskScheduler::SingleStep(), and unscheduleDelayedTask().
HandlerSet* BasicTaskScheduler0::fHandlers [protected] |
Definition at line 103 of file BasicUsageEnvironment0.hh.
Referenced by BasicTaskScheduler0(), BasicTaskScheduler::moveSocketHandling(), BasicTaskScheduler::setBackgroundHandling(), BasicTaskScheduler::SingleStep(), and ~BasicTaskScheduler0().
int BasicTaskScheduler0::fLastHandledSocketNum [protected] |
Definition at line 104 of file BasicUsageEnvironment0.hh.
Referenced by BasicTaskScheduler::SingleStep().
Definition at line 107 of file BasicUsageEnvironment0.hh.
Referenced by deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().
Definition at line 107 of file BasicUsageEnvironment0.hh.
Referenced by createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().
TaskFunc* BasicTaskScheduler0::fTriggeredEventHandlers[MAX_NUM_EVENT_TRIGGERS] [protected] |
Definition at line 108 of file BasicUsageEnvironment0.hh.
Referenced by BasicTaskScheduler0(), createEventTrigger(), deleteEventTrigger(), and BasicTaskScheduler::SingleStep().
void* BasicTaskScheduler0::fTriggeredEventClientDatas[MAX_NUM_EVENT_TRIGGERS] [protected] |
Definition at line 109 of file BasicUsageEnvironment0.hh.
Referenced by BasicTaskScheduler0(), createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().
unsigned BasicTaskScheduler0::fLastUsedTriggerNum [protected] |
Definition at line 110 of file BasicUsageEnvironment0.hh.
Referenced by createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().
1.5.2