A server which shares a time object with connected clients.
The Time Server Application instantiates a
MinuteTimer
object and shares it with all connected
Time Client Applications
.
The REP-file "timemodel.rep" in the parent directory of the example is used to generate the header-files used by both applications. For this application, the generated "rep_timemodel_source.h" file defines
MinuteTimerSource
, the the class to subclass for the implementation of
MinuteTimer
, and other related classes.
The
TimeModel
class in timemodel.h and timemodel.cpp implements the time object to share. It uses a
QBasicTimer
to ensure that the time is updated by calling the
timerEvent
member function.
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(); }
实例化的
QRemoteObjectHost
和
QRemoteObjectRegistryHost
are created to host an object and having a registry to find it. A
MinuteTimer
object is then created and it is shared using the
enableRemoting
member function of the
QRemoteObjectRegistryHost
对象。
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(); }
另请参阅 Time Client Application .