[this question से संबंधित]क्यूटी संकेतों और स्लॉट्स, धागे, app.exec(), और संबंधित प्रश्नों
मैं कोड के इस टुकड़े लिखा समझने के लिए क्यूटी संकेतों और स्लॉट काम करते हैं। मुझे व्यवहार की व्याख्या करने के लिए किसी की जरूरत है, और मुझे यह बताने के लिए कि क्या मैं अपने निष्कर्षों के बारे में सही हूं।
मेरे कार्यक्रम:
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();
}
अब, आर इस कार्यक्रम को अनन्य करने से यह नए कनेक्शन की तलाश में एक अनंत लूप में भेजता है।
Observation:
यदि मैं app.exec()
पर कॉल नहीं करता हूं, तो प्रोग्राम तुरंत लौटाता है (जैसा कि यह होना चाहिए)।
Question:
क्यों?
Question:
यदि मैंने स्लॉट को कतारबद्ध कनेक्शन के रूप में जोड़ा था, तो स्लॉट आमंत्रण कब किया जाएगा?
Question:
यदि app.exec()
एक अनंत लूप है, तो newConnection()
सिग्नल कभी भी उत्सर्जित हो जाता है?
Big Question:
क्या उनके यहां कोई दूसरा "दूसरा धागा" शामिल है? (मैं एक नहीं है, और एक stunningly सुंदर व्याख्या की उम्मीद :))
धन्यवाद,
jrh
पुनश्च: किसकी इस नेस्टेड कोष्टक सिंड्रोम है? जैसे "(.. :))" या "(.. (..))"?
अभी भी एक बात बनी हुई है: यदि मुख्य घटना लूप सिस्टम से घटनाओं को व्यस्त करने में व्यस्त है, तो उन्हें कौन उत्पन्न कर रहा है? मुख्य लूप इस लूप में इंतजार कर रहा है, तो 'newConnection()' सिग्नल कभी उत्सर्जित कैसे होता है? – jrharshath
@ harshath.jr - मैंने पहले QTcpServer का उपयोग नहीं किया है, लेकिन प्रलेखन से ऐसा लगता है कि यह आपके प्रोग्राम में टीसीपी घटनाओं को वितरित करने के लिए ओएस से पूछता है। जब आपका प्रोग्राम उस टीसीपी घटना को संसाधित करता है, तो QTcpServer जो करता है उसे करता है, फिर newConnection() को उत्सर्जित करता है। – Bill