Как создать обработчик сигналов и сигналов в RPG? (AS400 iSeries v5r4) - PullRequest
0 голосов
/ 20 августа 2010

Ценный ответ будет включать код 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 Ответ

1 голос
/ 22 августа 2010

В этой статье приводятся несколько хороших примеров использования сигналов (включая SIG_ALARM) из RPG ILE: http://systeminetwork.com/article/terminate-and-stay-residentin-rpg

Если ваша программа работает во время получения SIG_ALARM, выполнение временно переключается на обработчик аварийных сигналов.После того, как обработчик аварийных сигналов завершен, выполнение возобновляется с того места, где он остановился.

В примере, приведенном в ссылке, выполняется QCMDEXC и файл IO из обработчика аварийных сигналов, поэтому может показаться, что вы можете сделать что угодно.(Хотя в его примере не было основной магистрали, на которую можно было бы вмешаться; фактически, его обработчик аварийных сигналов работал после окончания магистрали!)

...