Qt signaux et les slots, les threads, app.exec(), et les questions relatives à l'

[liés à la cette question]

J'ai écrit ce morceau de code pour comprendre comment qt signaux et les slots de travail. J'ai besoin de quelqu'un pour expliquer le comportement, et de me dire si j'ai raison à propos de 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, l'exécution de ce programme envoie dans une boucle infinie à la recherche de nouvelles connexions.

Observation: si je ne l'appelez pas app.exec(), le programme renvoie immédiatement (comme il se doit).
Question: pourquoi?

Question: si j'avais branché la fente comme une file d'attente de connexion, quand le logement invocation être effectuée?
Question: si app.exec() est une boucle infinie de toutes sortes, comment le newConnection() signal jamais émis?

Big Question: Est leur tout "deuxième thread"? (Je m'attends à un pas, et un incroyablement élégant explication 🙂 )

Merci,
jrh

PS: qui d'autre a cette parenthèse imbriquée syndrome? comme "(.. :))" ou "(.. (..))"?

OriginalL'auteur jrharshath | 2009-09-24