Cómo ejecutar una (o varias) funciones periódicas en un servidor Ice.
Crear un servidor Ice es muy fácil con ayuda de la clase Ice.Application. El communicator() corre en un hilo distinto dejando libre el flujo actual para realizar otras tareas. Lo habitual después de configurar el adaptador y arrancar el comunicador, es invocar el método waitForShutdown() en espera de que el servidor acabe. Este es un servidor mínimo en Python aplicando esa idea:
A efectos de pruebas, el cliente sería:
Ahora imagina que, en el servidor, necesitas ejecutar un método cada 2 segundos. Una forma sencilla es utilizar el bucle de eventos de gobject, es decir, algo como lo siguiente (sólo pongo la clase Server):
Y esto funciona bien salvo por una pequeña pero desesperante cuestión: el programa no se cierra al pulsar Ctrl-C. Para arreglarlo, parece que lo más sencillo es usar otro método de Ice.Applicacion llamado callbackOnInterrupt() que provoca la ejecución del método especial interruptCallback() cuando se produce alguna de las señales prefijadas. Se puede aprovechar la ejecución de ese método para terminar el bucle de eventos de gobject. De tal modo que el servidor quedaría algo como: