[SailfishDevel] QThread priority

Krisztian Olah fasza2mobile at gmail.com
Wed May 28 16:03:39 UTC 2014


Hi Andrey,
   Thanks for the answer, your snippet looks very similar to what I have.
Perhaps if I posted my code segment would be of help in helping me figuring
out where I'm wrong.
   During parsing CPU usage reaches 97-100% which causes my GUI to hang(I
have about 500 000 opening and closing tags and half of the enclosed items
I need to process: save, in some cases insert spaces, etc), especially
awkward when I start parsing whilst still fetching the data from
network(sometimes hangs during pageStack.push() ), but it's bad for up to
2-5 seconds nevertheless. I wouldn't mind if parsing took 10 seconds if GUI
was responsive. This is what I'm doing:

void SomeClass::someMethod() {
              MyContainer* container = new MyContainer();
              //reader has a handle to container, through which it
populates the container
              MyXmlStreamReader* parser = new MyXmlStreamReader(container);
              QThread* parserThread = new QThread();
              parser->moveToThread(parserThread);


        connect(parser, SIGNAL(finished()), this, SLOT(onParsingFinished) );

        connect(parser, SIGNAL(finished()), parserThread, SLOT(quit()) );

        connect(parser, SIGNAL(finished()), parser, SLOT(deleteLater()) );

        connect(parserThread, SIGNAL(finished()), parserThread,
SLOT(deleteLater()) );


        parserThread->start();


        reply = networkMngr->get(QNetworkRequest(someUrl)); //both
pointers are class members


        connect(reply, SIGNAL(finished()), this, SLOT(onAllDataRecieved()) );


        //this starts the parser with the data available at the time,

              // when parser reaches the end of xml document it emits
its finished() signal

        connect(reply, SIGNAL(readyRead()), this, SLOT(parseReadyData()) );

}


Thanks again

Kris



On 28 May 2014 06:16, Andrey Kozhevnikov <coderusinbox at gmail.com> wrote:

>  it can't "doesn't help much". you initializing thread wrong.
>
> simple threading way is:
>
> MyXmlParser *parser = new MyXmlParser(xmlDocument);
> QThread *thread = new QThread(parser);
> parser->moveToThread(thread);
> QObject::connect(thread, SIGNAL(started()), parser, SLOT(parse()));
> QObject::connect(parser, SIGNAL(parseComplete(QVariantMap)), this,
> SLOT(onParseComplete(QVariantMap)));
> thread->start();
>
> 28.05.2014 03:24, Krisztian Olah пишет:
>
>       Hi list,
>   I have a rather large xml file to parse and it causes the UI to freeze,
> I assingned the parser to a different thread, but it doesn't help much.
> According to the Qt documentation QThread::setPriority() doesn't work on
> Linux, is there some kind of workaround that could be used?
>
>  Thanks
> Kris
>
>
> _______________________________________________
> SailfishOS.org Devel mailing list
> To unsubscribe, please send a mail to devel-unsubscribe at lists.sailfishos.org
>
>
>
> _______________________________________________
> SailfishOS.org Devel mailing list
> To unsubscribe, please send a mail to
> devel-unsubscribe at lists.sailfishos.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20140528/1e6886b3/attachment.html>


More information about the Devel mailing list