Как создать обработчик тревоги и сигнала в RPG? (AS400 Iseries v5r4)

StackOverflow https://stackoverflow.com/questions/3532592

Вопрос

Ценный ответ будет включать код 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 ()? Разрешено ли это, как я могу продолжать делать что -то до завершения программы, например, журнал к столу, пока куда я пошел?

Большое спасибо !

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top