[liés à this question]signaux Qt et fentes, fils, app.exec(), et les requêtes connexes
moi avons écrit ce morceau de code pour comprendre comment les signaux qt et fentes fonctionnent. J'ai besoin de quelqu'un pour expliquer le comportement et pour me dire si j'ai raison sur mes propres conclusions.
Mon programme:
connectionhandler.h
#ifndef CONNECTIONHANDLER_H
#define CONNECTIONHANDLER_H
#include <QTcpServer>
class ConnectionHandler : public QObject
{
Q_OBJECT
public:
ConnectionHandler();
public slots:
void newConn();
private:
QTcpServer *server;
};
#endif // CONNECTIONHANDLER_H
connectionhandler.cpp
#include "connectionhandler.h"
#include <QTextStream>
ConnectionHandler::ConnectionHandler() {
server = new QTcpServer;
server->listen(QHostAddress::LocalHost, 8080);
QObject::connect(server, SIGNAL(newConnection()),this, SLOT(newConn()));
}
void ConnectionHandler::newConn() {
QTextStream out(stdout);
out << "new kanneksan!\n";
out.flush();
}
main.cpp
#include <QCoreApplication>
#include "connectionhandler.h"
int main(int argc, char* argv[]) {
QCoreApplication app(argc,argv);
ConnectionHandler handler;
return app.exec();
}
Maintenant, r Unning ce programme l'envoie dans une boucle infinie à la recherche de nouvelles connexions.
Observation:
Si je n'appelle pas app.exec()
, le programme revient immédiatement (comme il se doit).
Question:
pourquoi?
Question:
Si j'avais connecté l'emplacement en tant que connexion en file d'attente, à quel moment l'appel de l'emplacement serait-il effectué?
Question:
Si app.exec()
est une sorte de boucle infinie, comment le signal newConnection()
est-il jamais émis?
Big Question:
Est-ce que leur «deuxième thread» est impliqué ici? (Je me attends pas, et une explication étonnamment élégant :))
Merci,
HJR
PS: qui d'autre ce syndrome imbriqué entre parenthèses? comme "(.. :))" ou "(.. (..))"?
il reste encore une chose: si la boucle d'événement principal est occupée à recevoir des événements du système, qui les génère? comment le signal 'newConnection()' est-il jamais émis, si la boucle principale est occupée dans cette boucle? – jrharshath
@ harshath.jr - Je n'ai jamais utilisé QTcpServer auparavant, mais à partir de la documentation, il semble qu'il demande au système d'exploitation de fournir des événements Tcp à votre programme. Lorsque votre programme traite cet événement tcp, QTcpServer fait ce qu'il doit faire, puis émet newConnection(). – Bill