[Qt-interest] Local event loop
KIMURA, Hidetaka
kimura at jig.jp
Thu Dec 16 02:52:14 CET 2010
Thanks all. Running a downloading task in a separate thread solved the
problem. I have used QtConcurrentRun to run the task in a separate
thread. The implementation is like following:
qint64 timeout = QDateTime::currentMSecsSinceEpoch() + 5000;
QFuture<QByteArray> future = QtConcurrent::run(download, url);
while (!future.isFinished()) {
if (QDateTime::currentMSecsSinceEpoch() > timeout) {
return; // timeout
}
// do sleep in some way for few msecs.
}
// future.result() is the downloaded content.
download function is similar to the code of Qt Quarterly's.
http://doc.trolltech.com/qq/qq27-responsive-guis.html#waitinginalocaleventloop
On Fri, 10 Dec 2010 00:01:05 -0800 (PST)
Mihail Naydenov <mlists at ymail.com> wrote:
> Still, if you use an reiml of QThread, you can aways block the main thread
> waiting for the thread to finish.
> Also all events will be sent to the thread event loop not the main one.
>
> MihailNaydenov
>
>
>
> ----- Original Message ----
> > From: "KIMURA, Hidetaka" <kimura at jig.jp>
> > To: qt-interest <qt-interest at trolltech.com>
> > Sent: Fri, December 10, 2010 2:25:48 AM
> > Subject: Re: [Qt-interest] Local event loop
> >
> > Thanks guys. But I do not want to run both main and local event loop. I
> > want to block main event loop. I want to download a file without running
> > any event in main event loop. But as shown in my sample code, timer
> > events have fired in eventLoop.exec().
> >
> > On Thu, 9 Dec 2010 09:39:17 -0400
> > Brian McKinnon <bpmckinnon.qt at gmail.com> wrote:
> >
> > > If I understand your problem correctly then I think you may want to look at
> > > a QThread. Each QThread provides its own event loop without blocking the
> > > main event loop.
> > >
> > > On Thu, Dec 9, 2010 at 4:46 AM, Kai Koehne <kai.koehne at nokia.com> wrote:
> > >
> > > > On 12/9/2010 2:03 AM, ext KIMURA, Hidetaka wrote:
> > > > > Hi,
> > > > >
> > > > > Is it possible to run a local event loop without firing events in the
> > > > main
> > > > > event loop? I want a MODAL event loop.
> > > >
> > > > I doubt that the main event loop is actually delivering the timeout
> > > > event (since it's blocked), but that the sub-event loop is delivering it.
> > > >
> > > > You can pose some restrictions on the types of events being delivered in
> > > > an event loop (see
> > > > http://doc.qt.nokia.com/4.7/qeventloop.html#ProcessEventsFlag-enum ).
> > > > Anyhow, it seems that this won't help you for your specific problem.
> > > >
> > > > Regards
> > > >
> > > > Kai Koehne
> > > >
> > > > > Here is a sample code that download a HTML in local event loop. I
> >expect
> > > > > that no timeout fires in the local event loop's exec(). This code is
> > > > > similar to Qt Quarterly's sample.
> > > > >
> > > > >
> > > >
> > > >
> >http://doc.trolltech.com/qq/qq27-responsive-guis.html#waitinginalocaleventloop
> > > > >
> > > > > #include<QCoreApplication>
> > > > > #include<QNetworkAccessManager>
> > > > > #include<QNetworkReply>
> > > > > #include<QNetworkRequest>
> > > > > #include<QTimer>
> > > > > #include<QUndoCommand>
> > > > >
> > > > > int main(int argc, char** argv) {
> > > > > QCoreApplication app(argc, argv);
> > > > > {
> > > > > // The timer will not fire in a local event loop.
> > > > > QUndoStack stack;
> > > > > for (int i = 0; i< 100; ++i) {
> > > > > stack.push(new
> >QUndoCommand(QString("%1").arg(i)));
> > > > > QTimer::singleShot(i * 10,&stack, SLOT(undo()));
> > > > > }
> > > > >
> > > > > QNetworkRequest request(QUrl("http://example.com/"));
> > > > > QNetworkReply* reply;
> > > > > QNetworkAccessManager manager;
> > > > >
> > > > > printf("stack index = %d (should be 100)\n",
> > > > stack.index());
> > > > > {
> > > > > // Entering local event loop
> > > > > QEventLoop eventLoop;
> > > > >
> > > > > eventLoop.connect(&manager,
> > > > SIGNAL(finished(QNetworkReply*)),
> > > > SLOT(quit()));
> > > > > reply = manager.get(request);
> > > > > eventLoop.exec();
> > > > > }
> > > > > printf("stack index = %d (should be 100)\n",
> > > > stack.index());
> > > > > }
> > > > > return 0;
> > > > > }
> > > > >
> > > > >
> > > > > -------
> > > > > KIMURA, Hide - kimura at jig.jp
> > > >
> > > >
> > > > --
> > > > Kai Koehne
> > > > Software Engineer
> > > > Nokia, Qt Development Frameworks
> > > >
> > > > Nokia gate5 GmbH
> > > > Firmensitz: Invalidenstr. 117, 10115 Berlin, Germany
> > > > Registergericht: Amtsgericht Charlottenburg, Berlin: HRB 106443 B
> > > > Umsatzsteueridentifikationsnummer: DE 812 845 193
> > > > Gesch?ftsf?hrer: Dr. Michael Halbherr, Karim T?htivuori
> > > > _______________________________________________
> > > > Qt-interest mailing list
> > > > Qt-interest at trolltech.com
> > > > http://lists.trolltech.com/mailman/listinfo/qt-interest
> > > >
> >
> > -------
> > KIMURA, Hide - kimura at jig.jp
> >
> >
>
>
>
-------
KIMURA, Hide - kimura at jig.jp
More information about the Qt-interest-old
mailing list