[Qt-interest] QThread and QNetwork
Jason H
scorp1us at yahoo.com
Thu May 26 19:17:24 CEST 2011
I haven't tried this, but you have to re-request it, and just wait. On a HTTP
1.1 connection, only one side can talk at a time. So you have to issue your poll
request and wait however long, to fill it.
You don't need threads to make this work, since the socket stuff is non-blocking
already.
So I'd start bu putting
db->startRequest(..)
in a while loop
----- Original Message ----
From: Matias Hernandez Arellano <msdark at archlinux.cl>
To: qt-interest at qt.nokia.com
Sent: Thu, May 26, 2011 12:56:15 PM
Subject: [Qt-interest] QThread and QNetwork
(sorry for my english)
Hi, i'm trying do make an application to query a couchdb database using HTTP
request to the _change API of the database.
To do this i create a class (DBCheck) that make a request to the _change API
using the continuos feed, this is a HTTP connection that live forever and make
possible to notify the client when a change occur in DB (real time, like Push
notification).
Then i create another class (just for test) no show a notification (in console)
of the change.
I connect this two classes using Signals and Slots.
Now i need to make this work with a GUI, the idea is show in a part of the GUI a
"table" that auto--update any change in DB (when DB notify for changes)..
To do this i thought i need to use Threads, so for testing purpose i create a
console application and try to run this, but i can't make that the Http class
(DBCheck) run inside a thread an notify every change to the main thread (or
other object using signals) .. i get an error about the diferents parents of the
object..
So this is the code (without thread)
#ifndef DBCHECK_H
#define DBCHECK_H
#include <QNetworkAccessManager>
#include <QUrl>
#include <QObject>
#include <QByteArray>
#include <qjson/parser.h>
#include <QVariantMap>
#include <QDebug>
class QNetworkReply;
class DBCheck: public QObject
{
Q_OBJECT
public:
DBCheck();
void startRequest(QUrl);
signals:
void change();
private slots:
void httpFinished();
void httpReadyRead();
private:
QUrl url;
QNetworkAccessManager qnam;
QNetworkReply *reply;
};
DBCheck::DBCheck()
{
}
void DBCheck::startRequest(QUrl url){
reply = qnam.get(QNetworkRequest(url));
connect(reply, SIGNAL(finished()),this, SLOT(httpFinished()));
connect(reply, SIGNAL(readyRead()),this, SLOT(httpReadyRead()));
return;
}
void DBCheck::httpFinished(){
qDebug()<<"Finished";
return;
}
void DBCheck::httpReadyRead(){
this->result = this->reply->readAll();
emit change();
}
//the other class
#ifndef NOTIF_H
#define NOTIF_H
#include <QObject>
#include <QDebug>
class Notif:public QObject{
Q_OBJECT
public:
Notif(){
}
~Notif(){
}
public slots:
void notificar(){
qDebug()<<"Cambio!";
}
};
#endif // NOTIF_H
and the main.cpp
#include <QCoreApplication>
#include "dbcheck.h"
#include "notif.h"
#include <QDebug>
int main(int argc, char *argv[]){
QCoreApplication app(argc, argv);
DBCheck *db = new DBCheck();
Notif *t = new Notif();
QObject::connect(db,SIGNAL(change()),t,SLOT(notificar()));
db->startRequest(QUrl("http://127.0.0.1:5984/test/_changes?feed=continuous&since=39"));
return app.exec();
}
How can i run the DBCheck object in a thread???
any guideline or idea would very appreciate ...
Thanks in advance.
Matías Hernandez Arellano
Ingeniero de Software/Proyectos en VisionLabs S.A
CDA Archlinux-CL
www.msdark.archlinux.cl
_______________________________________________
Qt-interest mailing list
Qt-interest at qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-interest
More information about the Qt-interest-old
mailing list