46 std::shared_ptr<canvas::tools::ElapsedTime> pPresTimer )
71 catch (
const uno::Exception&)
81 std::unique_lock aGuard(
maMutex );
83 SAL_INFO(
"slideshow.eventqueue",
"adding event \"" << rEvent->GetDescription()
84 <<
"\" [" << rEvent.get()
85 <<
"] at " <<
mpTimer->getElapsedTime()
86 <<
" with delay " << rEvent->getActivationTime(0.0)
89 "EventQueue::addEvent: event ptr NULL" );
101 mpTimer->getElapsedTime()) ) );
107 std::unique_lock aGuard(
maMutex );
109 SAL_INFO(
"slideshow.eventqueue",
"adding event \"" << rEvent->GetDescription()
110 <<
"\" [" << rEvent.get()
111 <<
"] for the next round at " <<
mpTimer->getElapsedTime()
112 <<
" with delay " << rEvent->getActivationTime(0.0)
116 "EventQueue::addEvent: event ptr NULL" );
117 maNextEvents.emplace_back( rEvent, rEvent->getActivationTime(
124 std::unique_lock aGuard(
maMutex );
126 SAL_INFO(
"slideshow.eventqueue",
"adding event \"" << rpEvent->GetDescription()
127 <<
"\" [" << rpEvent.get()
128 <<
"] for execution when the queue is empty at " <<
mpTimer->getElapsedTime()
129 <<
" with delay " << rpEvent->getActivationTime(0.0)
137 rpEvent->getActivationTime(
mpTimer->getElapsedTime())));
154 std::unique_lock aGuard(
maMutex );
156 SAL_INFO(
"slideshow.verbose",
"EventQueue: heartbeat" );
167 const double nCurrTime(
mpTimer->getElapsedTime() );
185 (bFireAllEvents ||
maEvents.top().nTime <= nCurrTime) )
197 if( event.
pEvent->isCharged() )
202 SAL_INFO(
"slideshow.eventqueue",
"firing event \""
203 << event.
pEvent->GetDescription()
204 <<
"\" [" << event.
pEvent.get()
205 <<
"] at " <<
mpTimer->getElapsedTime()
206 <<
" with delay " << event.
pEvent->getActivationTime(0.0)
208 event.pEvent->fire();
209 SAL_INFO(
"slideshow.eventqueue",
"event \""
210 << event.
pEvent->GetDescription()
211 <<
"\" [" << event.
pEvent.get() <<
"] fired"
214 catch( uno::RuntimeException& )
218 catch( uno::Exception& )
244 SAL_WARN(
"slideshow.eventqueue",
"::presentation::internal::EventQueue: Event threw a SlideShowException, action might not have been fully performed" );
251 "slideshow.eventqueue",
252 "Ignoring discharged event: unknown ("
253 << event.
pEvent.get() <<
"), timeout was: "
254 << event.
pEvent->getActivationTime(0.0));
261 std::unique_lock aGuard(
maMutex );
268 std::unique_lock aGuard(
maMutex );
271 double nTimeout (::std::numeric_limits<double>::max());
272 const double nCurrentTime (
mpTimer->getElapsedTime());
274 nTimeout =
maEvents.top().nTime - nCurrentTime;
276 nTimeout = ::std::min(nTimeout,
maNextEvents.front().nTime - nCurrentTime);
278 nTimeout = ::std::min(nTimeout,
maNextNextEvents.top().nTime - nCurrentTime);
285 std::unique_lock aGuard(
maMutex );
EventQueue(std::shared_ptr< ::canvas::tools::ElapsedTime > pPresTimer)
std::shared_ptr< ::canvas::tools::ElapsedTime > mpTimer
EventEntryVector maNextEvents
bool addEventForNextRound(const EventSharedPtr &event)
Add the given event to the queue.
void forceEmpty()
Forces an empty queue, firing all events immediately without minding any times.
::std::priority_queue< EventEntry > ImplQueueType
ImplQueueType maNextNextEvents
bool addEvent(const EventSharedPtr &event)
Add the given event to the queue.
double nextTimeout() const
Query timeout for the topmost event in the queue.
::std::vector< EventEntry > EventEntryVector
void process()
Process the event queue.
void process_(bool bFireAllEvents)
bool addEventWhenQueueIsEmpty(const EventSharedPtr &rpEvent)
Another way to control the order of asynchronous event execution.
void clear()
Remove all pending events from the queue.
bool isEmpty() const
Query state of the queue.
#define TOOLS_WARN_EXCEPTION(area, stream)
#define ENSURE_OR_RETURN_FALSE(c, m)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
::std::shared_ptr< Event > EventSharedPtr
bool operator<(const EventEntry &) const