11 #ifndef hifi_ThreadHelpers_h
12 #define hifi_ThreadHelpers_h
17 #include <QtCore/QMutex>
18 #include <QtCore/QMutexLocker>
19 #include <QtCore/QWaitCondition>
20 #include <QtCore/QObject>
21 #include <QtCore/QString>
22 #include <QtCore/QThread>
24 template <
typename L,
typename F>
25 void withLock(L lock, F
function) {
26 throw std::exception();
30 void withLock(QMutex& lock, F
function) {
31 QMutexLocker locker(&lock);
35 void setThreadName(
const std::string& name);
37 void moveToNewNamedThread(QObject*
object,
const QString& name,
38 std::function<
void(QThread*)> preStartCallback,
39 std::function<
void()> startCallback,
40 QThread::Priority priority = QThread::InheritPriority);
42 void moveToNewNamedThread(QObject*
object,
const QString& name,
43 std::function<
void()> startCallback,
44 QThread::Priority priority = QThread::InheritPriority);
46 void moveToNewNamedThread(QObject*
object,
const QString& name,
47 QThread::Priority priority = QThread::InheritPriority);
49 class ConditionalGuard {
52 QMutexLocker locker(&_mutex);
57 bool wait(
unsigned long time = ULONG_MAX) {
58 QMutexLocker locker(&_mutex);
60 _condition.wait(&_mutex, time);
66 QWaitCondition _condition;
67 bool _triggered {
false };