كيفية إنشاء إنذار وإشارة معالج في آر بي جي؟ (AS400 ISERIES V5R4)

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

سؤال

ستتضمن إجابة قيمة رمز آر بي جي الذي يفعل شيئًا كهذا

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/ermate-and-stay-rentidentin-rpg

إذا كان برنامجك قيد التشغيل أثناء استلام SIG_Alarm ، فإن التنفيذ يتحول مؤقتًا إلى معالج الإنذار. بعد الانتهاء من معالج الإنذار ، يستأنف التنفيذ حيث توقف.

المثال الوارد في الرابط يقوم QCMDEXC و FILE IO من معالج الإنذار ، لذلك يبدو أنه يمكنك فعل أي شيء هناك. (رغم ذلك ، لم يكن مثاله في الأساس أي خط رئيسي يمكن أن يتدخل فيه ؛ في الواقع كان معالج الإنذار يعمل بعد انتهاء الخط الرئيسي!)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top