+ struct timespec startTime;
+ struct timespec now;
+ clock_gettime( CLOCK_REALTIME, &startTime );
+ now.tv_sec = startTime.tv_sec;
+ now.tv_nsec = startTime.tv_nsec;
+
+ // Round robin poll of each semaphore:
+ while ( triggerCount > 0 )
+ {
+ if( gEventThreadCallbacks.size() > 0 )
+ {
+ for( std::vector<Dali::EventThreadCallback*>::iterator iter = gEventThreadCallbacks.begin();
+ iter != gEventThreadCallbacks.end(); ++iter )
+ {
+ Dali::EventThreadCallback* eventTrigger = (*iter);
+ Dali::CallbackBase* callback = eventTrigger->GetCallback();
+ bool timedout = eventTrigger->WaitingForTrigger();
+ if( ! timedout )
+ {
+ // Semaphore was unlocked - execute the trigger
+ Dali::CallbackBase::Execute( *callback );
+ triggerCount--;
+ }
+ if( triggerCount <= 0 )
+ {
+ break;
+ }
+ }
+ }
+ clock_gettime( CLOCK_REALTIME, &now );
+ if( now.tv_sec - startTime.tv_sec > timeoutInSeconds )
+ {
+ // Ensure we break out of the loop if elapsed time has passed
+ break;
+ }
+ }
+
+ clock_gettime( CLOCK_REALTIME, &now );
+ if( now.tv_sec > startTime.tv_sec + 1 )
+ {
+ fprintf(stderr, "WaitForEventThreadTrigger took %ld seconds\n", now.tv_sec - startTime.tv_sec );
+ }
+ return triggerCount == 0;