[Interest] readyRead() signal issues with QTcpSopcket and Qt 5.6 under minGW

Thiago Macieira thiago.macieira at intel.com
Mon Jul 11 18:05:06 CEST 2016

On segunda-feira, 11 de julho de 2016 15:47:17 PDT Etienne Sandré-Chardonnal 
> Hi Thiago,
> After further investigation, the issue is not related to TCP but to
> threads/events. It's on client (ie sender) side.
> I have the following order of events :
> Client * client = new Client(host, this);
> QThread * clientThread = new QThread(this);
> client->moveToThread(clientThread);
> connect(this, SIGNAL(sendClientCommand(QString)), client, SLOT(command(
> QString)));

Does the command(QString) really take that much CPU time to create the command 
message to be sent over the socket that you need it to run on a separate 

And by "that much", I mean A LOT of CPU time. If you can't say that is the 
case, stop using threads.

> So I have a signal connected to an object's slot in another thread. I emit
> the signal before the thread is started. I do not know if this is correct,
> but :
>    - With Qt 5.4 the command("loadstart") slot is properly called as soon
>    as possible
>    - With Qt 5.6 the slot is not called until I emit the signal again, as
>    if the event was queued, but the queue not processed until another event
> is sent.

Ok, that description sounds like a really serious event dispatching issue. Can 
you reduce this to a testcase?

> Also, if I add a Client::threadStarted() slot calling processEvents() and
> connect it to QThread::started() slot of clientThread, then the command
> slot is processed on time. I do not know if this is an effect of
> processEvents() or if this is because the connection is also queued, thus
> waking up the event loop.
> Can this be a Qt bug or am I misusing the queued connection?

Your description makes it sound like a serious Qt bug. That's why I need the 

Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

More information about the Interest mailing list