Results 1 to 20 of 21

Thread: emit a signal from inside a callback routine

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Feb 2007
    Location
    Karlsruhe, Germany
    Posts
    469
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    17
    Thanked 90 Times in 88 Posts

    Default Re: emit a signal from inside a callback routine

    Quote Originally Posted by franco.amato View Post
    In which part of the code I have to write the QObject::connect?
    Any. I suggest where you create the sounddata. If your sounddata is more generic than just data being played back, I suggest to set it up when you prepare it for playback. But then you will have to remove the connection after playback ended, to avoid multiple connections, when you play it back again. I don't know enough about the layout of your program to help you here..

    BTW: As the connect function is a static function of the QObject class, you only need to write "QObject::" in front of connect, if you are outside a QObject class.. Inside you can just write "connect(..)". But I showed you QObject::connect .. to underline that you can call this from everywhere.

    Quote Originally Posted by franco.amato View Post
    In that case ( a signal emitted by a callback ) I have to specify the Queued connections flag right?
    That depends on your callback library. Some execute the callback within the thread context of your application (synchronized) and some don't (async). Perhaps you can specify that when you set the callback. When the callback is already synchronized it doesn't make a lot of sense to go through qt's message system again (=>direct connection). Unless the callback needs to return very quickly and you want to do something big in your connected slot. If the callback is called asynchronously (in the threadcontext of the libraray) and you want to access GUI elements or something else that is not thread safe, you have to go for the Queued connection.

    Just try both options.. and see what works for you.. Or specify nothing and let qt decide. Qt decides upon matching thread contexts. Which should work just fine here.

    Cheers!

    Johannes

  2. #2
    Join Date
    Nov 2007
    Location
    Italy
    Posts
    694
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    59
    Thanked 1 Time in 1 Post

    Default Re: emit a signal from inside a callback routine

    Quote Originally Posted by JohannesMunk View Post
    Any. I suggest where you create the sounddata. If your sounddata is more generic than just data being played back, I suggest to set it up when you prepare it for playback. But then you will have to remove the connection after playback ended, to avoid multiple connections, when you play it back again. I don't know enough about the layout of your program to help you here..

    BTW: As the connect function is a static function of the QObject class, you only need to write "QObject::" in front of connect, if you are outside a QObject class.. Inside you can just write "connect(..)". But I showed you QObject::connect .. to underline that you can call this from everywhere.


    That depends on your callback library. Some execute the callback within the thread context of your application (synchronized) and some don't (async). Perhaps you can specify that when you set the callback. When the callback is already synchronized it doesn't make a lot of sense to go through qt's message system again (=>direct connection). Unless the callback needs to return very quickly and you want to do something big in your connected slot. If the callback is called asynchronously (in the threadcontext of the libraray) and you want to access GUI elements or something else that is not thread safe, you have to go for the Queued connection.

    Just try both options.. and see what works for you.. Or specify nothing and let qt decide. Qt decides upon matching thread contexts. Which should work just fine here.

    Cheers!

    Johannes
    The callback is executed when a playing file finish to play.
    In this case I have to stop a QTimer that I use to determine the "pcm position" within the
    audio data ( this to move a timeline ). So I think is not necesary to remove the connection. Because if a file is not playing the callback is never called. ( how I remove a callback?? ).

    I don't exactly know if the callback is sync or async, I have to ask to the fmod community for that.
    If is async I have to use the Queued connections flag right?

    Thank you
    Franco Amato

  3. #3
    Join Date
    Feb 2007
    Location
    Karlsruhe, Germany
    Posts
    469
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    17
    Thanked 90 Times in 88 Posts

    Default Re: emit a signal from inside a callback routine

    You didn't get me.

    If you set up the signal slot connection whenever you START playing the sounddata on an Audiodevice there will be multiple signal-slot-connections, if you play the same sound multiple times and you don't remove the connection with QObject::disconnect after play back stopped.

    If you set it up only once when you create the sound everything is fine.

    Callback: No need to ask. Just try what works. You can't break anything.

    Good luck with your project!

    Johannes

  4. #4
    Join Date
    Nov 2007
    Location
    Italy
    Posts
    694
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    59
    Thanked 1 Time in 1 Post

    Default Re: emit a signal from inside a callback routine

    Quote Originally Posted by JohannesMunk View Post
    You didn't get me.

    If you set up the signal slot connection whenever you START playing the sounddata on an Audiodevice there will be multiple signal-slot-connections, if you play the same sound multiple times and you don't remove the connection with QObject::disconnect after play back stopped.

    If you set it up only once when you create the sound everything is fine.

    Callback: No need to ask. Just try what works. You can't break anything.

    Good luck with your project!

    Johannes
    Thank you very much Johannes for your precious help.

    Best Regards
    Franco Amato

  5. #5
    Join Date
    Feb 2007
    Location
    Karlsruhe, Germany
    Posts
    469
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    17
    Thanked 90 Times in 88 Posts

    Default Re: emit a signal from inside a callback routine

    You are welcome!

  6. #6
    Join Date
    Nov 2007
    Location
    Italy
    Posts
    694
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows
    Thanks
    59
    Thanked 1 Time in 1 Post

    Default Re: emit a signal from inside a callback routine

    Quote Originally Posted by JohannesMunk View Post
    You are welcome!
    Hi I have a new problem. Some posts ago you explained to me how to connect a signal to a slots of 2 "unknow" objects, eather one is part of the other.
    You gave to me this clear example:

    Qt Code:
    1. AudioDevice* ad = new AudioDevice();
    2. ...
    3. SoundData* sd = new SoundData();
    4. ...
    5. QObject::connect(ad,SIGNAL(soundStopped()),sd,SLOT(someSLOT()));
    To copy to clipboard, switch view to plain text mode 

    Supposing ad (or object A in general has a slider)
    I would connect the "valueChanged(int)" signal of the QSlider sl that's part of the object A with a slot that's part of the object B

    Something like this:

    Qt Code:
    1. AudioDevice* ad = new AudioDevice(); //ad has a QSlider sl
    2. ...
    3. SoundData* sd = new SoundData(); //sd has a slot slot_sd(int);
    4. ...
    5. QObject::connect(ad->sl,SIGNAL(valueChanged(int)),sd,SLOT(slot_sd(int)));
    To copy to clipboard, switch view to plain text mode 

    Is it possible?
    Best Regards
    Franco Amato

Similar Threads

  1. how to emit signal in a static function ?
    By cxl2253 in forum Qt Programming
    Replies: 32
    Last Post: 7th July 2016, 22:36
  2. emit qt signal is very slow how it can be optimized?
    By sawerset in forum Qt Programming
    Replies: 8
    Last Post: 30th December 2008, 10:21
  3. pthread instead QThread
    By brevleq in forum Qt Programming
    Replies: 8
    Last Post: 23rd December 2008, 08:16
  4. Connection of custon signals/slots
    By brevleq in forum Qt Programming
    Replies: 2
    Last Post: 23rd December 2008, 08:04
  5. how to know which button emit the signal?
    By coder1985 in forum Qt Programming
    Replies: 2
    Last Post: 12th January 2008, 15:26

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.