16 #ifndef QGSTHREADINGUTILS_H
17 #define QGSTHREADINGUTILS_H
21 #include "qgis_core.h"
55 template <
typename Func>
60 if ( QThread::currentThread() == qApp->thread() )
72 QSemaphore semaphoreMainThreadReady( 1 );
77 QSemaphore semaphoreWorkerThreadReady( 1 );
81 semaphoreMainThreadReady.acquire();
82 semaphoreWorkerThreadReady.acquire();
84 const std::function<void()> waitFunc = [&semaphoreMainThreadReady, &semaphoreWorkerThreadReady]()
89 semaphoreMainThreadReady.release();
92 semaphoreWorkerThreadReady.acquire();
95 QMetaObject::invokeMethod( qApp, waitFunc, Qt::QueuedConnection );
99 while ( !semaphoreMainThreadReady.tryAcquire( 1, 100 ) )
101 if ( feedback->isCanceled() )
103 semaphoreWorkerThreadReady.release();
113 semaphoreWorkerThreadReady.release();
116 QMetaObject::invokeMethod( qApp, func, Qt::BlockingQueuedConnection );