N'est-ce pas app.exec()
une boucle infinie qui renvoie main()
?
Je veux boucle le serveur de communication du client ci-dessous, mais il est exécutée juste alors la fonction principale se termine avec app.exec()
Je suis nouvelle à la fois pour Qt et C++, comment puis-je gérer cette boucle?
int main(int argc, char *argv[])
{
cout << "Waiting for the next request " << endl;
QApplication app(argc, argv);
// Prepare our context and socket
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://*:2424");
zmq::message_t request;
QQmlApplicationEngine engine;
VideoStreamer videoStreamer;
imageProvider *liveOriginalImageProvider(new imageProvider);
imageProvider *liveMaskedImageProvider(new imageProvider);
//********SERVER CLIENT COMMUNICATION BEGINS******//
// Wait for next request from client
cout << "Waiting for the next request ." << endl;
socket.recv(&request);
cout << "Waiting for the next request.. " << endl;
string replyMessage = string(static_cast<char *>(request.data()), request.size());
// Print out received message
cout << "Received from client (Python): " + replyMessage << endl;
// See the gradual sending/replying from client
sleep(1);
// Send reply back to client
string msgToClient("W");
zmq::message_t reply(msgToClient.size());
memcpy((void *) reply.data(), (msgToClient.c_str()), msgToClient.size());
socket.send(reply);
//*********SERVER CLIENT COMMUNICATION ENDS**********//
engine.rootContext()->setContextProperty("VideoStreamer",&videoStreamer);
engine.rootContext()->setContextProperty("liveOriginalImageProvider",liveOriginalImageProvider);
engine.rootContext()->setContextProperty("liveMaskedImageProvider",liveMaskedImageProvider);
engine.addImageProvider("liveOriginal",liveOriginalImageProvider);
engine.addImageProvider("liveMasked",liveMaskedImageProvider);
const QUrl url(QStringLiteral("qrc:/main.qml"));
engine.load(url);
QObject::connect(&videoStreamer,&VideoStreamer::originalImage,liveOriginalImageProvider,&imageProvider::updateImage);
QObject::connect(&videoStreamer,&VideoStreamer::maskedImage,liveMaskedImageProvider,&imageProvider::updateImage);
return app.exec();
}
---------Mise à JOUR---------
J'ai créé ce fil en fil.h
class MyThread : public QThread{
public slots:
void run();
};
dans thread.cpp j'ai déclaré la méthode:
void MyThread :: run() {
// Prepare our context and socket
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_REP);
socket.bind("tcp://*:2424");
zmq::message_t request;
//********SERVER CLIENT COMMUNICATION BEGINS******//
// Wait for next request from client
cout << "Waiting for the next request ." << endl;
socket.recv(&request);
cout << "Waiting for the next request.. " << endl;
string replyMessage = string(static_cast<char *>(request.data()), request.size());
// Print out received message
cout << "Received from client (Python): " + replyMessage << endl;
// See the gradual sending/replying from client
sleep(1);
// Send reply back to client
string msgToClient("W");
zmq::message_t reply(msgToClient.size());
memcpy((void *) reply.data(), (msgToClient.c_str()), msgToClient.size());
socket.send(reply);
exec();
//*********SERVER CLIENT COMMUNICATION ENDS**********//
}
dans main.cpp je l'ai appelé:
QThread *thread = new QThread();
MyThread *myThread = new MyThread();
myThread->moveToThread(thread);
myThread->connect(thread, SIGNAL(started()), myThread, SLOT(run()));
thread->start();
Je reçois Error: Class declaration lacks Q_OBJECT macro.
Ne pas QThread hériter de QObject? Comment puis-je appeler la boucle correctement?