是不是 app.exec()
一个无限循环,返回 main()
?
我想循环 服务的客户沟通 以下,但它得到执行的只是那些后的主要功能结束 app.exec()
我是新的两夸脱和C++、如何管理这个循环?
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();
}
---------更新,---------
我创建了这个线程,在 线。h
class MyThread : public QThread{
public slots:
void run();
};
在 thread.cpp 我宣布的方法:
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**********//
}
在 main.cpp 我把它叫做:
QThread *thread = new QThread();
MyThread *myThread = new MyThread();
myThread->moveToThread(thread);
myThread->connect(thread, SIGNAL(started()), myThread, SLOT(run()));
thread->start();
我得到 Error: Class declaration lacks Q_OBJECT macro.
不会每继承QObject? 我怎么能呼叫循环是否正确?