Qtのシグナルとスロット、スレッド、(app.exec)、および関連するクエリ
私はQTシグナルとスロットがどのように働くかを理解するために、コードのこの部分を書きました。行動を説明し、自分の結論が正しいかどうかを教えてくれる人が必要です。
私のプログラム:今すぐ
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();
}
、Rこのプログラムを作成すると、新しい接続を探す無限ループにそれを送ります。
Observation:
私がapp.exec()
に電話をしていないと、プログラムはすぐに(必要に応じて)戻ります。
Question:
なぜですか?
Question:
スロットを待ち接続として接続していた場合、スロットの呼び出しはいつ実行されますか?
Question:
app.exec()
が無限ループの場合、newConnection()
シグナルはどのように放出されますか?
Big Question:
これらの「第2のスレッド」はここに含まれていますか?このネストされた括弧症候群を持っている他:
おかげで、
JRH
PSを(私は:)がない、と驚くほどエレガントな説明を期待して)? "(.. :))"や "(..(..))"のように?
メインイベントループがシステムからイベントを取得するのに忙しい場合、誰がそれらを生成していますか?このループでメインループがビジー状態であれば、 'newConnection()'シグナルはどのように放出されますか? – jrharshath
@ harshath.jr - 以前はQTcpServerを使用していませんでしたが、ドキュメンテーションから、OSにプログラムにTcpイベントを配信するように頼んでいるようです。プログラムがそのtcpイベントを処理すると、QTcpServerは必要な処理を行い、newConnection()を発行します。 – Bill