有价值的答案将包括执行此类操作的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()中调用另一个方法吗?是否允许,如何在程序结束前继续做某事,比如记录到桌子上,直到我去了哪里?
非常感谢!
答案 0 :(得分:1)
本文提供了一些使用ILE RPG信号(包括SIG_ALARM)的好例子: http://systeminetwork.com/article/terminate-and-stay-residentin-rpg
如果您的程序在收到SIG_ALARM时正在运行,则执行会暂时切换到警报处理程序。警报处理程序完成后,执行将从中断处继续执行。
链接中给出的示例从警报处理程序执行QCMDEXC和文件IO,因此看起来您可以执行任何操作。 (虽然,他的例子基本上没有可能受到干扰的主线运行;事实上他的警报处理程序在主线结束后运行!)