source: trunk/src/corelib/kernel/qeventloop.cpp@ 620

Last change on this file since 620 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

File size: 10.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtCore module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qeventloop.h"
43
44#include "qabstracteventdispatcher.h"
45#include "qcoreapplication.h"
46#include "qdatetime.h"
47
48#include "qobject_p.h"
49#include <private/qthread_p.h>
50
51QT_BEGIN_NAMESPACE
52
53class QEventLoopPrivate : public QObjectPrivate
54{
55 Q_DECLARE_PUBLIC(QEventLoop)
56public:
57 inline QEventLoopPrivate()
58 : exit(true), inExec(false), returnCode(-1)
59 { }
60 bool exit, inExec;
61 int returnCode;
62};
63
64/*!
65 \class QEventLoop
66 \brief The QEventLoop class provides a means of entering and leaving an event loop.
67
68 At any time, you can create a QEventLoop object and call exec()
69 on it to start a local event loop. From within the event loop,
70 calling exit() will force exec() to return.
71
72 \sa QAbstractEventDispatcher
73*/
74
75/*!
76 \enum QEventLoop::ProcessEventsFlag
77
78 This enum controls the types of events processed by the
79 processEvents() functions.
80
81 \value AllEvents All events. Note that
82 \l{QEvent::DeferredDelete}{DeferredDelete} events are processed
83 specially. See QObject::deleteLater() for more details.
84
85 \value ExcludeUserInputEvents Do not process user input events,
86 such as ButtonPress and KeyPress. Note that the events are not
87 discarded; they will be delivered the next time processEvents() is
88 called without the ExcludeUserInputEvents flag.
89
90 \value ExcludeSocketNotifiers Do not process socket notifier
91 events. Note that the events are not discarded; they will be
92 delivered the next time processEvents() is called without the
93 ExcludeSocketNotifiers flag.
94
95 \value WaitForMoreEvents Wait for events if no pending events are
96 available.
97
98 \omitvalue X11ExcludeTimers
99 \omitvalue ExcludeUserInput
100 \omitvalue WaitForMore
101 \omitvalue EventLoopExec
102 \omitvalue DialogExec
103 \value DeferredDeletion deprecated - do not use.
104
105 \sa processEvents()
106*/
107
108/*!
109 Constructs an event loop object with the given \a parent.
110*/
111QEventLoop::QEventLoop(QObject *parent)
112 : QObject(*new QEventLoopPrivate, parent)
113{
114 Q_D(QEventLoop);
115 if (!QCoreApplication::instance()) {
116 qWarning("QEventLoop: Cannot be used without QApplication");
117 } else if (!d->threadData->eventDispatcher) {
118 QThreadPrivate::createEventDispatcher(d->threadData);
119 }