Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_lazy_wait_condition.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __KIS_LAZY_WAIT_CONDITION_H
8#define __KIS_LAZY_WAIT_CONDITION_H
9
10#include <QMutex>
11#include <QMutexLocker>
12#include <QWaitCondition>
13
51{
52public:
58
59 void initWaiting() {
60 QMutexLocker locker(&m_mutex);
61 if(!m_waitCounter) {
63 }
64
66 }
67
68 void endWaiting() {
69 QMutexLocker locker(&m_mutex);
71 }
72
73 bool wait(unsigned long time = ULONG_MAX) {
74 QMutexLocker locker(&m_mutex);
75 bool result = true;
76 if(!m_wakeupCounter) {
77 result = m_condition.wait(&m_mutex, time);
78 }
79 if(result) {
81 }
82 return result;
83 }
84
85 void wakeAll() {
86 if(!m_waitCounter) return;
87
88 QMutexLocker locker(&m_mutex);
89 if(m_waitCounter) {
91 m_condition.wakeAll();
92 }
93 }
94
96 return m_waitCounter;
97 }
98
99private:
100 QMutex m_mutex;
101 QWaitCondition m_condition;
102 volatile int m_waitCounter;
104};
105
106#endif /* __KIS_LAZY_WAIT_CONDITION_H */
bool wait(unsigned long time=ULONG_MAX)