16 #ifndef QGSTHREADINGUTILS_H 17 #define QGSTHREADINGUTILS_H 21 #include "qgis_core.h" 55 template <
typename Func>
58 #if QT_VERSION >= QT_VERSION_CHECK( 5, 10, 0 ) 61 if ( QThread::currentThread() == qApp->thread() )
73 QSemaphore semaphoreMainThreadReady( 1 );
78 QSemaphore semaphoreWorkerThreadReady( 1 );
82 semaphoreMainThreadReady.acquire();
83 semaphoreWorkerThreadReady.acquire();
85 std::function<void()> waitFunc = [&semaphoreMainThreadReady, &semaphoreWorkerThreadReady]()
90 semaphoreMainThreadReady.release();
93 semaphoreWorkerThreadReady.acquire();
96 QMetaObject::invokeMethod( qApp, waitFunc, Qt::QueuedConnection );
100 while ( !semaphoreMainThreadReady.tryAcquire( 1, 100 ) )
102 if ( feedback->isCanceled() )
104 semaphoreWorkerThreadReady.release();
114 semaphoreWorkerThreadReady.release();
117 QMetaObject::invokeMethod( qApp, func, Qt::BlockingQueuedConnection );
Base class for feedback objects to be used for cancelation of something running in a worker thread...
static bool runOnMainThread(const Func &func, QgsFeedback *feedback=nullptr)
Guarantees that func is executed on the main thread.
Provides threading utilities for QGIS.