[Development] invokeMethod() with function pointers

Olivier Goffart olivier at woboq.com
Mon Jan 16 11:21:32 CET 2017


On Montag, 16. Januar 2017 12:57:01 CET Konstantin Tokarev wrote:
> 16.01.2017, 12:34, "Olivier Goffart" <olivier at woboq.com>:
> > On Samstag, 14. Januar 2017 17:28:01 CET Benjamin TERRIER wrote:
> >>  Hi everyone,
> >> 
> >>  I'm trying to contribute by making QMetaObject::invokeMethod() take
> >> function pointers instead of function names.
> >> 
> >>  I've come up with something that works by looking at the code of
> >>  QMetaObject::invokeMethod, QObject::connect and QMetaObject::activate.
> > 
> > Thanks for your contribution.
> > 
> > What's the use case for this function? For direct call you better of
> > calling the function directly, and the equivalent of QueuedConnection can
> > be achieved with QTimer::singleShot.
> 
> QTimer::singleShot creates temporary QSingleShotTimer object, which does not
> seem to be efficient solution if same method needs to be called a lot of
> times in QueuedConnection way.

Yes, that's true: The string based method is optimized for 0ms timeout, but 
not the function pointer one. 
The function pointer version could be optimized for 0 timer the same way that 
the string version of QTimer::singleShot does.
(Well, not exactly the same way currently as we cannot use 
QMetaObject::invokeMethod yet.)

-- 
Olivier

Woboq - Qt services and support - https://woboq.com - https://code.woboq.org




More information about the Development mailing list