[SailfishDevel] QThread priority
Denis Zalevskiy
denis.zalevskiy at jollamobile.com
Thu May 29 10:55:40 UTC 2014
On Wednesday 28 May 2014 22:07:20 Andrey Kozhevnikov wrote:
> need to look into your parseReadyData
>
> 28.05.2014 22:03, Krisztian Olah ?????:
> > 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
> > itsfinished() signal>
> > connect(reply, SIGNAL(readyRead()), this, SLOT(parseReadyData())
> > );
> >
> > }
> >
To run parser in parallel just to get results in the main thread it is better
to use QtConcurrent::run() + QFutureWatcher.
- denis
> > Thanks again
> > Kris
> >
> >
> > On 28 May 2014 06:16, Andrey Kozhevnikov <coderusinbox at gmail.com
> >
> > <mailto: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
> >> todevel-unsubscribe at lists.sailfishos.org
> >> <mailto:devel-unsubscribe at lists.sailfishos.org>>
> > _______________________________________________
> > SailfishOS.org Devel mailing list
> > To unsubscribe, please send a mail to
> > devel-unsubscribe at lists.sailfishos.org
> > <mailto:devel-unsubscribe at lists.sailfishos.org>
> >
> > _______________________________________________
> > SailfishOS.org Devel mailing list
> > To unsubscribe, please send a mail to
> > devel-unsubscribe at lists.sailfishos.org
More information about the Devel
mailing list