Hi,

Thanks, and now the "root cause" is found, that the "finished" signal is posted 
to the main thread, and also it will try to wake up the main thread:

void QEventDispatcherUNIX::wakeUp()
{
    Q_D(QEventDispatcherUNIX);
    if (d->wakeUps.testAndSetAcquire(0, 1)) {
        char c = 0;
        qt_safe_write( d->thread_pipe[1], &c, 1 );
    }
}

But "d->wakeUps.testAndSetAcquire(0, 1)" returns zero, so eventually the main 
thread's event loop is not triggered.

Can someone share what's the purpose of using testAndSetAcquire here ?

Thanks,
Song

From: development-bounces+song.7.liu=nokia....@qt-project.org 
[mailto:development-bounces+song.7.liu=nokia....@qt-project.org] On Behalf Of 
ext Markus Goetz
Sent: Friday, July 20, 2012 3:32 AM
To: development@qt-project.org
Subject: Re: [Development] About "finish" signal in 
QHttpNetworkConnectionChannel

On 19.07.12 17:55, song.7....@nokia.com<mailto:song.7....@nokia.com> wrote:
Hi,
I am using the QNetworkAccessManager::get to request content from 
http://www.google.com.
Then the QHttpNetworkConnectionChannel will be created and worked on another 
thread, when all the data is received, the 
QHttpNetworkConnectionChannel::allDone will be invoked, where:

    // queue the finished signal, this is required since we might send new 
requests from
    // slot connected to it. The socket will not fire readyRead signal, if we 
are already
    // in the slot connected to readyRead
    if (reply && emitFinished)
        QMetaObject::invokeMethod(reply, "finished", Qt::QueuedConnection);

So this "finished" signal will be queued in the thread of QNetworkReplyHttpImpl 
until a new event will be handled.

Finally, my application also won't receive any finished signal until for 
example: touch the screen to trigger the queued signal be handled.

So why using the type Qt::QueuedConnection for this "finished" signal ? is 
there something wrong in my side ?

The finished() communicated will be "queued" anyway nowadays since the 
inter-thread communication (from HTTP thread to your user thread) is happening 
via the event loop. Also it is not queued until a new event will be handled, it 
should flow to your user thread without further delay.

I have no idea right now why your issue could happen => 
https://bugreports.qt-project.org

bye,
Markus
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to