2010-08-20 86 views
0

一个有价值的答案将包括RPG代码,做这样的事情如何在RPG中创建警报和信号处理程序? (AS400的iSeries 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 
} 

我认为你有这个想法。 我有一个代码,阻止,类似于睡眠,我想要一个警报来解锁阻止呼叫

另一个问题,在警报处理程序完成后,执行点在哪里?它会终止程序吗?,我可以在myHandler()中调用另一个方法吗?是否允许,我怎么能在程序结束之前继续做某些事情,比如登录桌面直到我去了哪里?

非常感谢!

回答

1

本文给出了用信号(包括SIG_ALARM)从ILE RPG的一些很好的例子: http://systeminetwork.com/article/terminate-and-stay-residentin-rpg

如果在SIG_ALARM收到您的程序正在运行,执行临时切换到报警处理程序。警报处理程序完成后,执行从停止的地方恢复。

链接中给出的示例从报警处理程序中执行QCMDEXC和文件IO,因此看起来您可以在其中执行任何操作。 (虽然他的例子基本上没有可能被干扰的主线运行;事实上,他的警报处理程序在主线结束后运行!)