Qt, Signale und slots, threads, app.exec () und Verwandte Abfragen

[im Zusammenhang mit der diese Frage]

Schrieb ich dieses Stück code zu verstehen, wie qt, Signale und slots arbeiten. Ich brauche jemanden, um zu erklären, das Verhalten, und mir zu sagen, wenn ich im Recht bin, über meine eigenen Schlussfolgerungen.

Mein Programm:

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();
}

Nun, die Ausführung dieses Programms sendet Sie in einer Endlosschleife auf der Suche nach neuen verbindungen.

Observation: wenn ich nicht anrufen app.exec(), das Programm liefert sofort (wie es sollte).

Question: warum?

Question: wenn ich verbunden die Spielautomat in einer Warteschlange Verbindung, wenn die slot-Aufruf durchgeführt werden?

Question: wenn app.exec() ist eine unendliche Schleife der Art, wie der newConnection() signal jemals emittiert?

Big Question: Ist, deren jeder "zweiten thread" hier beteiligt? (Ich erwarte keine, und eine erstaunlich elegante Erklärung 🙂 )

Dank,

jrh

PS: wer hat sonst noch dieses verschachtelte Klammern-Syndrom? wie "(.. :))" oder "(.. (..))"?

InformationsquelleAutor jrharshath | 2009-09-24
Schreibe einen Kommentar