summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qeventdispatcher_symbian_p.h
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-05-15 15:43:57 (GMT)
committeraxis <qt-info@nokia.com>2009-05-19 14:16:51 (GMT)
commitdbf64e86f37384a991153335ca4c1528cf44295a (patch)
tree7a156e75177e79f623efba9ee50b7e087bb312d8 /src/corelib/kernel/qeventdispatcher_symbian_p.h
parent1a1f4a8b3c8850d7abe4dda5b85b850094cf7a6a (diff)
downloadQt-dbf64e86f37384a991153335ca4c1528cf44295a.zip
Qt-dbf64e86f37384a991153335ca4c1528cf44295a.tar.gz
Qt-dbf64e86f37384a991153335ca4c1528cf44295a.tar.bz2
Changed the way that Qt handles active objects.
The change was done in order to get a more round-robin type of event handling, at least for Qt active objects. With this change, each object will only execute once within each call to processEvents, like other platforms. This is required for certain tests using Open C, because some of the function calls in that library take much longer than their desktop counterparts. Therefore the timer expires before the previous timer handler was finished and the test gets stuck executing the same timer over and over. By returning from processEvents after one iteration, we prevent this. RevBy: Aleksandar Sasha Babic AutoTest: Passed
Diffstat (limited to 'src/corelib/kernel/qeventdispatcher_symbian_p.h')
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h44
1 files changed, 32 insertions, 12 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index 8144472..3233fe4 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -45,6 +45,24 @@ QT_BEGIN_NAMESPACE
class QEventDispatcherSymbian;
class QTimerActiveObject;
+class QActiveObject : public CActive
+{
+public:
+ QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher);
+ ~QActiveObject();
+
+ bool okToRun();
+
+ void reactivateAndComplete();
+
+protected:
+ QEventDispatcherSymbian *m_dispatcher;
+
+private:
+ bool m_hasAlreadyRun : 1;
+ bool m_hasRunAgain : 1;
+};
+
class QWakeUpActiveObject : public CActive
{
public:
@@ -76,10 +94,10 @@ struct SymbianTimerInfo : public QSharedData
typedef QExplicitlySharedDataPointer<SymbianTimerInfo> SymbianTimerInfoPtr;
// This is a bit of a proxy class. See comments in SetActive and Start for details.
-class QTimerActiveObject : public CActive
+class QTimerActiveObject : public QActiveObject
{
public:
- QTimerActiveObject(SymbianTimerInfo *timerInfo);
+ QTimerActiveObject(QEventDispatcherSymbian *dispatcher, SymbianTimerInfo *timerInfo);
~QTimerActiveObject();
void Start();
@@ -93,25 +111,23 @@ private:
RTimer m_rTimer;
};
-class QCompleteZeroTimersActiveObject : public CActive
+class QCompleteDeferredAOs : public CActive
{
public:
- QCompleteZeroTimersActiveObject(QEventDispatcherSymbian *dispatcher);
- ~QCompleteZeroTimersActiveObject();
+ QCompleteDeferredAOs(QEventDispatcherSymbian *dispatcher);
+ ~QCompleteDeferredAOs();
- bool ref();
- bool deref();
+ void complete();
protected:
void DoCancel();
void RunL();
private:
- int m_refCount;
QEventDispatcherSymbian *m_dispatcher;
};
-class QSocketActiveObject : public CActive
+class QSocketActiveObject : public QActiveObject
{
public:
QSocketActiveObject(QEventDispatcherSymbian *dispatcher, QSocketNotifier *notifier);
@@ -124,7 +140,6 @@ protected:
void RunL();
private:
- QEventDispatcherSymbian *m_dispatcher;
QSocketNotifier *m_notifier;
bool m_inSocketEvent;
bool m_deleteLater;
@@ -187,7 +202,10 @@ public:
void socketFired(QSocketActiveObject *socketAO);
void wakeUpWasCalled();
void reactivateSocketNotifier(QSocketNotifier *notifier);
- void completeZeroTimers();
+
+ void addDeferredActiveObject(QActiveObject *object);
+ void removeDeferredActiveObject(QActiveObject *object);
+ void reactivateDeferredActiveObjects();
static void RequestComplete(TRequestStatus *&status, TInt reason);
static void RequestComplete(RThread &threadHandle, TRequestStatus *&status, TInt reason);
@@ -205,7 +223,7 @@ private:
QHash<QSocketNotifier *, QSocketActiveObject *> m_notifiers;
QWakeUpActiveObject *m_wakeUpAO;
- QCompleteZeroTimersActiveObject *m_completeZeroTimersAO;
+ QCompleteDeferredAOs *m_completeDeferredAOs;
volatile bool m_interrupt;
QAtomicInt m_wakeUpDone;
@@ -213,6 +231,8 @@ private:
bool m_noSocketEvents;
QList<QSocketActiveObject *> m_deferredSocketEvents;
+ QList<QActiveObject *> m_deferredActiveObjects;
+
RProcess m_processHandle;
};