छोड़कर मैं धागे के साथ संयोजन में क्यूटी संकेतों और स्लॉट की बेहतर समझ खोजने की कोशिश कर रहा हूं।क्यूटी थ्रेड बाहर निकलने के बाद रुकता नहीं है/
foo.h:
#include <QObject>
class A : public QObject {
Q_OBJECT
public:
void doit();
signals:
void x();
};
class B : public QObject {
Q_OBJECT
public slots:
void h();
};
foo.cpp:
#include "foo.h"
#include <QThread>
#include <QCoreApplication>
void B::h() {
qDebug("[%d] B::h() here!", (int) QThread::currentThreadId());
QCoreApplication::instance()->quit();
}
void A::doit() {
qDebug("[%d] emitting...", (int) QThread::currentThreadId());
emit x();
}
int main(int argc, char* argv[]) {
QCoreApplication app(argc, argv);
A a;
B b;
QObject::connect(&a, SIGNAL(x()), &b, SLOT(h()));
QThread t;
t.start();
b.moveToThread(&t);
a.doit();
t.wait();
return 0;
}
सब कुछ ठीक है, केवल t.wait() अंत में कभी नहीं देता है तो मैं इस कम से कम आवेदन की कोशिश की। मेरी समझ छोड़ना है() को ईवेंट लूप को रोकना चाहिए, जिसका अर्थ है कि exec() को वापस जाना चाहिए और इसलिए चलाना चाहिए() और थ्रेड निष्पादन रोकना चाहिए। क्या मैं कुछ भूल रहा हूँ?
आपके तरीकों का नाम उनके उद्देश्य को स्पष्ट करना चाहिए। – UmNyobe
चिंता न करें, यह उत्पादन कोड नहीं है! मुझे कृत्रिम रूप से वर्णनात्मक नामों की तुलना में छोटे नमूना/परीक्षण कोड में नकली नाम बहुत बेहतर काम करते हैं। – Elektito
मैं UmNyobe से सहमत हूं। यदि आपने अधिक जानकारीपूर्ण नामों का उपयोग किया है तो नमूना कोड को पढ़ना और समझना आसान होगा। जैसे ए :: doit() -> ए :: emitThreadStart(), शून्य x() -> startThread(), शून्य एच() -> शून्य छोड़ दें आवेदन() ... आदि – Dmitriy