1

一个有价值的答案将包括执行此类操作的 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() 中调用另一个方法吗?是否允许,我怎样才能在程序完成之前继续做某事,比如登录到一张桌子直到我去了哪里?

非常感谢 !

4

1 回答 1

2

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

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

链接中给出的示例执行来自警报处理程序的 QCMDEXC 和文件 IO,因此您似乎可以在那里做任何事情。(虽然,他的示例基本上没有可以被干扰的主线运行;实际上他的警报处理程序在主线结束后运行!)

于 2010-08-21T21:40:33.907 回答