2010-08-20 27 views
0

Une réponse valable comprendra le code rpg qui fait quelque chose comme çaComment créer un gestionnaire d'alarme et de signal dans RPG? (ISeries AS400 V5R4)

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 
} 

Je pense que vous avez l'idée. J'ai un code qui bloque, semblable à la veille, et je veux une alarme pour débloquer l'appel de blocage

Une autre question, après que le gestionnaire d'alarme a terminé, où va le point d'exécution? Termine-t-il le programme?, puis-je appeler une autre méthode dans myHandler()? Est-ce autorisé, comment puis-je continuer à faire quelque chose avant que le programme ne se termine, comme le journal à une table jusqu'à où suis-je allé?

Merci beaucoup!

Répondre

1

Cet article donne quelques bons exemples d'utilisation de signaux (y compris SIG_ALARM) de RPG ILE: http://systeminetwork.com/article/terminate-and-stay-residentin-rpg

Si votre programme est en cours d'exécution en SIG_ALARM est reçu, l'exécution passe temporairement au gestionnaire d'alarme. Une fois le gestionnaire d'alarme terminé, l'exécution reprend là où elle s'était arrêtée.

L'exemple donné dans le lien fait QCMDEXC et le fichier IO du gestionnaire d'alarmes, il semblerait donc que vous puissiez y faire à peu près n'importe quoi. (Cependant, son exemple n'avait pratiquement aucune ligne principale en cours d'exécution qui pourrait être interféré, en fait, son gestionnaire d'alarme était en cours d'exécution après la fin de la ligne principale!)