时间服务器应用程序
一个与已连接客户端共享时间对象的服务器。
时间服务器应用程序实例化了一个 MinuteTimer
对象,并将其与所有已连接的 时间客户端应用程序 共享。
使用 REP 文件定义远程对象
示例的父目录中的 REP 文件 "timemodel.rep" 用于生成两个应用程序都使用的头文件。对于此应用程序,生成的 "rep_timemodel_source.h" 文件定义了 MinuteTimerSource
,这是用于实现 MinuteTimer
的子类及其它相关类的类。
TimeModel 类
timemodel.h 和 timemodel.cpp 中的 TimeModel
类实现了要共享的时间对象。它使用一个 QBasicTimer
通过调用 timerEvent
成员函数来确保时间更新。
void MinuteTimer::timerEvent(QTimerEvent *) { QTime now = QTime::currentTime(); if (now.second() == 59 && now.minute() == time.minute() && now.hour() == time.hour()) { // just missed time tick over, force it, wait extra 0.5 seconds time = time.addSecs(60); timer.start(60500, this); } else { time = now; timer.start(60000-time.second()*1000, this); } qDebug()<<"Time"<<time; setHour(time.hour()); setMinute(time.minute()); emit timeChanged(); }
共享 TimeModel 的实例
创建了 QRemoteObjectHost
和 QRemoteObjectRegistryHost
的实例来托管一个对象并具有一个注册表以找到它。然后创建了一个 MinuteTimer
对象,通过使用 QRemoteObjectRegistryHost
对象的 enableRemoting
成员函数来共享它。
int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); #if defined(Q_OS_UNIX) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) signal(SIGINT, &unix_handler); #elif defined(Q_OS_WIN32) SetConsoleCtrlHandler((PHANDLER_ROUTINE)WinHandler, TRUE); #endif QRemoteObjectHost node(QUrl(QStringLiteral("local:replica")),QUrl(QStringLiteral("local:registry"))); QRemoteObjectRegistryHost node2(QUrl(QStringLiteral("local:registry"))); MinuteTimer timer; node2.enableRemoting(&timer); Q_UNUSED(timer) return app.exec(); }
另请参阅时间客户端应用程序。
© 2024 Qt 公司。本文档中包含的贡献的版权属于其各自的拥有者。本文档基于自由软件基金会发布、经修改的 GNU 自由文档许可证版本 1.3 的条款提供。Qt 和相应的标志是 Finland 和/或在全世界其它国家 Qt 公司的商标。所有其他商标是它们各自所有者的财产。