Pregunta

Una respuesta valiosa incluirá el código RPG que hace algo como esto

volatile bool interrupted;
main() {
  sigaction(SIG_ALARM, myhandler) // register handler
  alarm(3) // set the alarm
  sleep(5) // blocking call, sleep just as an example.
  alarm(0) // disable the alarm
}
myHandler() {
  interrupted=true
}

Creo que tienes la idea. Tengo un código que bloquea, similar al sueño, y quiero una alarma para desbloquear la llamada de bloqueo

Otra pregunta, después de que el controlador de alarma haya terminado, ¿a dónde va el punto de ejecución? ¿Termina el programa?, ¿Puedo llamar a otro método mientras está dentro de MyHandler ()? ¿Está permitido, cómo puedo seguir haciendo algo antes de que termine el programa, como registrar una mesa hasta a dónde fui?

Muchos gracias !

¿Fue útil?

Solución

Este artículo ofrece algunos buenos ejemplos del uso de señales (incluida Sig_alarm) de Ile RPG:http://systeminetwork.com/article/terminate-and-stay-residentin-rpg

Si su programa se está ejecutando mientras se recibe SIG_ALARM, la ejecución cambia temporalmente al controlador de alarma. Después de finalizar el controlador de alarma, la ejecución se reanuda donde lo dejó.

El ejemplo dado en el enlace hace QCMDEXC y el archivo IO desde el controlador de alarma, por lo que parece que puede hacer casi cualquier cosa allí. (Sin embargo, su ejemplo básicamente no tenía una carrera principal con la que pudiera interferir; de hecho, su controlador de alarma estaba funcionando después de que terminó la línea principal!)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top