C++ 连接/断开复制副本时,QtRemoteObject在主机中接收信号

C++ 连接/断开复制副本时,QtRemoteObject在主机中接收信号,c++,qt,remoteobject,C++,Qt,Remoteobject,我使用Qt的qtmoteobject模块在许多设备上运行进程。当前的体系结构是,有一台主机(称之为ManagerNode)创建源对象,然后有许多其他远程计算机在局域网上运行(称之为处理器节点)。随着许多处理器节点的启动,我成功地让它们连接到ManagerNode。一旦通过信号/插槽进行连接,通信就变得非常简单 我的问题是:在ManagerNode上,当每个ProcessorNode连接时,以及当ProcessorNode断开连接时(即由于internet中断/计算机崩溃),我希望锁定某种类型的信

我使用Qt的
qtmoteobject
模块在许多设备上运行进程。当前的体系结构是,有一台主机(称之为ManagerNode)创建源对象,然后有许多其他远程计算机在局域网上运行(称之为处理器节点)。随着许多处理器节点的启动,我成功地让它们连接到ManagerNode。一旦通过信号/插槽进行连接,通信就变得非常简单

我的问题是:在ManagerNode上,当每个ProcessorNode连接时,以及当ProcessorNode断开连接时(即由于internet中断/计算机崩溃),我希望锁定某种类型的信号

以下是我的一些代码片段:

Host/main.cpp

#include <QCoreApplication>
#include "simpleswitch.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QRemoteObjectRegistryHost regHost(QUrl("tcp://10.81.2.42"));

    QRemoteObjectHost host;
    host.setHostUrl(QUrl("tcp://10.81.2.42:1"));
    host.setRegistryUrl(QUrl("tcp://10.81.2.42"));

    SimpleSwitch simpleSwitch;
    host.enableRemoting(&simpleSwitch);

    return a.exec();
}
#包括
#包括“simpleswitch.h”
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QRemoteObjectRegistryHost regHost(QUrl(“tcp://10.81.2.42"));
QRemoteObjectHost主机;
host.setHostUrl(QUrl(“tcp://10.81.2.42:1"));
host.setRegistryUrl(QUrl(“tcp://10.81.2.42"));
简单开关简单开关;
host.enableRemoting(&simpleSwitch);
返回a.exec();
}
副本/main.cpp

#include <QCoreApplication>
#include "client.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QRemoteObjectNode node(QUrl("tcp://10.81.2.42"));

    while (!node.waitForRegistry(1000));
    qDebug() << "Registry is Setup";

    QSharedPointer<SimpleSwitchReplica> ptr;
    ptr.reset(node.acquire<SimpleSwitchReplica>());
    Client rswitch(ptr);

    return a.exec();
}
#包括
#包括“client.h”
int main(int argc,char*argv[])
{
qcorea应用程序(argc、argv);
QRemoteObjectNode节点(QUrl(“tcp://10.81.2.42"));
而(!node.waitForRegistry(1000));

qDebug()最有可能的情况是,您需要来自处理器的心跳信号,并在信号丢失时做出反应(超时).是的,心跳将成为我的备份计划。我只是很惊讶副本端有一个stateChanged信号,而源端没有stateChanged信号……查看源端类上的完整方法列表很有帮助(每个类的文档页面都有一个指向完整方法列表的突出链接),在它继承的类中可能有您想要的信号。QRemoteObjectHost类中的注册表对象中有一个stateChanged信号,但当我连接到该信号时,当复制副本连接/断开连接时,它不会打印输出。