diff options
author | Thomas Sondergaard <ts@medical-insight.com> | 2009-06-04 13:06:31 +0200 |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-06-04 13:11:40 +0200 |
commit | c4773c1b2372ac9119244c5af6d0f0dae3e8f685 (patch) | |
tree | 2ff58dff5018de56a86320ea1ae404da6de13912 /src | |
parent | df5c557e7777c8844ac866d730346178ad33a0a6 (diff) |
Don't use inactivatable timers to calculate time to wait for next timer.
This patch prevents the eventloop from waking up needlessly.
Without this patch the event loop will not sleep at all if a 0-timer is already 'inTimerEvent'
Merge-request: 550
Reviewed-by: Olivier Goffart <ogoffart@trolltech.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_unix.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index 6aa3b56fa7..f7293d4b7a 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -420,10 +420,18 @@ bool QTimerInfoList::timerWait(timeval &tm) timeval currentTime = updateCurrentTime(); repairTimersIfNeeded(); - if (isEmpty()) - return false; + // Find first waiting timer not already active + QTimerInfo *t = 0; + for (QTimerInfoList::const_iterator it = constBegin(); it != constEnd(); ++it) { + if (!(*it)->inTimerEvent) { + t = *it; + break; + } + } + + if (!t) + return false; - QTimerInfo *t = first(); // first waiting timer if (currentTime < t->timeout) { // time to wait tm = t->timeout - currentTime; |