diff -r b72c6db6890b -r 5dc02b23752f src/corelib/kernel/qtimer.cpp --- a/src/corelib/kernel/qtimer.cpp Wed Jun 23 19:07:03 2010 +0300 +++ b/src/corelib/kernel/qtimer.cpp Tue Jul 06 15:10:48 2010 +0300 @@ -339,8 +339,20 @@ void QTimer::singleShot(int msec, QObject *receiver, const char *member) { - if (receiver && member) + if (receiver && member) { + if (msec == 0) { + // special code shortpath for 0-timers + const char* bracketPosition = strchr(member, '('); + if (!bracketPosition || !(member[0] >= '0' && member[0] <= '3')) { + qWarning("QTimer::singleShot: Invalid slot specification"); + return; + } + QByteArray methodName(member+1, bracketPosition - 1 - member); // extract method name + QMetaObject::invokeMethod(receiver, methodName.constData(), Qt::QueuedConnection); + return; + } (void) new QSingleShotTimer(msec, receiver, member); + } } /*!