Move QScopedLoopLevelCounter to qthread_p.h

... and use it in QCoreApplication::notifyInterna() instead of
"reinventing" the wheel there. The constructor and destructor for
QScopedLoopLevelCounter are inline, so the class does not need to be
exported.

Change-Id: I7af5a4ef0987f277bcc50c1057f3c74152f3d79d
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
Bradley T. Hughes 2011-11-21 15:28:57 +01:00 committed by Qt by Nokia
parent 90b67743d1
commit 722cbfe738
3 changed files with 12 additions and 22 deletions

View File

@ -809,16 +809,7 @@ bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event)
// call overhead. // call overhead.
QObjectPrivate *d = receiver->d_func(); QObjectPrivate *d = receiver->d_func();
QThreadData *threadData = d->threadData; QThreadData *threadData = d->threadData;
QScopedLoopLevelCounter loopLevelCounter(threadData);
// Exception-safety without try/catch
struct Incrementer {
int &variable;
inline Incrementer(int &variable) : variable(variable)
{ ++variable; }
inline ~Incrementer()
{ --variable; }
};
Incrementer inc(threadData->loopLevel);
#ifdef QT_JAMBI_BUILD #ifdef QT_JAMBI_BUILD
int deleteWatch = 0; int deleteWatch = 0;

View File

@ -227,6 +227,17 @@ public:
bool isAdopted; bool isAdopted;
}; };
class QScopedLoopLevelCounter
{
QThreadData *threadData;
public:
inline QScopedLoopLevelCounter(QThreadData *threadData)
: threadData(threadData)
{ ++threadData->loopLevel; }
inline ~QScopedLoopLevelCounter()
{ --threadData->loopLevel; }
};
// thread wrapper for the main() thread // thread wrapper for the main() thread
class QAdoptedThread : public QThread class QAdoptedThread : public QThread
{ {

View File

@ -68,7 +68,6 @@
#include "QtCore/qhash.h" #include "QtCore/qhash.h"
#include "QtCore/qpointer.h" #include "QtCore/qpointer.h"
#include "private/qcoreapplication_p.h" #include "private/qcoreapplication_p.h"
#include <private/qthread_p.h>
#include "QtCore/qpoint.h" #include "QtCore/qpoint.h"
#include <QTime> #include <QTime>
#include <QWindowSystemInterface> #include <QWindowSystemInterface>
@ -263,17 +262,6 @@ typedef struct tagGESTURECONFIG
#endif // Q_WS_WIN #endif // Q_WS_WIN
class QScopedLoopLevelCounter
{
QThreadData *threadData;
public:
QScopedLoopLevelCounter(QThreadData *threadData)
: threadData(threadData)
{ ++threadData->loopLevel; }
~QScopedLoopLevelCounter()
{ --threadData->loopLevel; }
};
struct FontHash : public QHash<QByteArray, QFont> struct FontHash : public QHash<QByteArray, QFont>
{ {
FontHash(); FontHash();