Re: [ROOT] TQObject::Emit()

From: Valeriy Onuchin (onuchin@fnal.gov)
Date: Fri Mar 23 2001 - 22:00:26 MET


 Hi Anton,
it seems we started digging too deep into technical details.
Let's talk about it "privetly".
But you correctly noticed that Qt call mechanism should be more efficient just because:

TQObject:Emit => TQConnection::ExecuteMethod => G__CallFunc::Exec => pointer_to_func

and check analog of TQObject:Emit in Qt:

QObject::activate_signal => ... => pointer_to_func

Regards.     Valeriy

++
  Signal-Slots communication mechanism getting more popular.
  Another implementation of it based on templates was appeared recently.
  Check http://libsigc.sourceforge.net/ Thanks to Brett Viren for reference.




Anton Fokin wrote:

>
> Hi Valery,
>
> I meant that Emit("DataChanged()") call might be time consuming since you
> take an argument as char string, compress it and loop over class and object
> signal/connection lists (why don't you use hash table, btw?). I was curious
> how it is done in Qt/moc. If you say it does nearly the same, no probs. A
> benchmark test could be like
>
> while (end_test) {
>   DataChanged();
> }
>
> with and without Emit() in DataChanged(). Of course nobody should be
> connected to this signal. On the other hand result will depend on how long
> are lists of signals...
>
> > > I am also not sure what it takes in Qt/moc. In Qt you do not need to
> call
> > > Emit() in a signal method - the signal will be emitted automatically
> once
> > > the method is declared as signal.
> > >
> >
> > ("It is not correct ..."  Valery Fine;)
> >
> >
> > I studied Qt code ... it also uses "Emit" method inside "signal"
> > Suppose looking at the code produced after MOC preprocessor will reveal
> it.
> > > I am also not sure what it takes in Qt/moc. In Qt you do not need to
> call
> > > Emit() in a signal method - the signal will be emitted automatically
> once
> > > the method is declared as signal.
> > >
> >
> > ("It is not correct ..."  Valery Fine;)
> >
> >
> > I studied Qt code ... it also uses "Emit" method inside "signal"
> > Suppose looking at the code produced after MOC preprocessor will reveal
> it.
>
> Yes, that was the questions. I meant that a user does not need to put Emit()
> in the body of a signal method in Qt - moc does it. I asked if it is done in
> a clever way since moc has control over the code and can make some "direct"
> substitutions.
>
> Regards,
> Anton
>
> http://www.smartquant.com
>
> ----- Original Message -----
> From: Valeriy Onuchin <onuchin@fnal.gov>
> To: Anton Fokin <anton.fokin@smartquant.com>
> Cc: <roottalk@pcroot.cern.ch>
> Sent: Thursday, March 22, 2001 11:27 PM
> Subject: Re: [ROOT] TQObject::Emit()
>
> > Hi Anton,
> >
> > Anton Fokin wrote:
> >
> > >
> > >
> > > Hi,
> > >
> > > If I want to use singal/slots I have to add Emit("DataChanged()"); or
> alike
> > > in my TQObject inherited class method to emit a signal. I am curious if
> this
> > > call is costly or not.
> >
> >  What cost do you mean?
> >
> >  Memory?
> >
> >     TQObject has 2 data members which are pointers to
> Lists( sizeof(TList*) = 4 ).
> >     These TLists are created(new TList) only when connection is
> established
> >     ( sizeof(TList) = 44 ). During creation of connection some internal
> structures
> >     are also initiated, but it was designed to make it minimal amd reuses
> existent ones.
> >
> >
> > >
> > >
> > > I am also not sure what it takes in Qt/moc. In Qt you do not need to
> call
> > > Emit() in a signal method - the signal will be emitted automatically
> once
> > > the method is declared as signal.
> > >
> >
> > ("It is not correct ..."  Valery Fine;)
> >
> >
> > I studied Qt code ... it also uses "Emit" method inside "signal"
> > Suppose looking at the code produced after MOC preprocessor will reveal
> it.
> >
> >
> >
> > >
> > > So could you comment on performance of Emit("DataCahnged()") decoding
> (with
> > > CINT dict, etc.) compare to Qt moc processing.
> >
> > Fair comparison of benchmark tests is always difficult task
> > ( btw it's not a bad business
> http://www.tpc.org/information/about/join.asp )
> >
> > Suggest the "fair test" and I/we can try it.
> >
> >
> > Regards.    Valeriy
> >
> >
> >



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:50:40 MET