[relative al this question]segnali Qt e slot, fili, app.exec(), e query correlate
Ho scritto questo pezzo di codice per capire come i segnali qt e slot funzionano. Ho bisogno che qualcuno spieghi il comportamento e mi dica se ho ragione delle mie conclusioni.
Il mio programma:
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();
}
Ora, r undo questo programma lo invia in un ciclo infinito alla ricerca di nuove connessioni.
Observation:
se non si chiama app.exec()
, il programma restituisce immediatamente (come dovrebbe).
Question:
perché?
Question:
se si collegava lo slot come collegamento in coda, quando si eseguirà l'invocazione dello slot?
Question:
se app.exec()
è un ciclo infinito di tipi, come viene emesso il segnale newConnection()
?
Big Question:
È il loro "secondo thread" coinvolto? (Mi aspetto un no, e una spiegazione incredibilmente elegante :))
Grazie,
JRH
PS: chi altro ha questa sindrome parentesi nidificato? come "(.. :))" o "(.. (..))"?
rimane ancora una cosa: se il ciclo di eventi principale è occupato a ricevere eventi dal sistema, chi li sta generando? come viene emesso il segnale 'newConnection()', se il loop principale è occupato in attesa in questo ciclo? – jrharshath
@ harshath.jr - Non ho usato QTcpServer in precedenza, ma dalla documentazione sembra che chieda al sistema operativo di fornire eventi Tcp al tuo programma. Quando il tuo programma elabora quell'evento tcp, il QTcpServer fa ciò di cui ha bisogno, quindi emette newConnection(). – Bill