I am writing a media player that uses an online stream. I recently migrated from GStreamer to the phonon framework and have run into some strange blocking issues.

When I call the MediaObject:lay() function, it blocks (EVERYTHING) while it is buffering.
I have tried placing it a an alternate thread but when I send the signal for it to play, it takes over the main event queue and blocks again. When I use QConcurrent to launch the play() wrapper function it buffers (blocking that thread) then exits which causes the thread to terminate and the stream to stop.

On slower connections the blocking cripples the GUI for some time. Any idea on why this is blocking, or how to stop it?

I have done some programming with QThreads in the past, but am having problems getting functions triggered via SIGNALs in other threads to execute in its own thread. The function always seems to migrate to the parent thread and block the GUI.

Any way to make a function triggered via an external thread queue up and execute in its OWN thread, and not the SIGNALing thread?


masscrack -- A Cross platform, dynamically threaded, and distributed password cracker