如何在RPG中创建警报和信号处理程序? (AS400 iSeries v5r4)

时间:2010-08-20 15:57:03

标签: handler ibm-midrange signals rpg

有价值的答案将包括执行此类操作的RPG代码

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 个答案:

答案 0 :(得分:1)

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

如果您的程序在收到SIG_ALARM时正在运行,则执行会暂时切换到警报处理程序。警报处理程序完成后,执行将从中断处继续执行。

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