كيفية إنشاء إنذار وإشارة معالج في آر بي جي؟ (AS400 ISERIES V5R4)
-
30-09-2019 - |
سؤال
ستتضمن إجابة قيمة رمز آر بي جي الذي يفعل شيئًا كهذا
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 من معالج الإنذار ، لذلك يبدو أنه يمكنك فعل أي شيء هناك. (رغم ذلك ، لم يكن مثاله في الأساس أي خط رئيسي يمكن أن يتدخل فيه ؛ في الواقع كان معالج الإنذار يعمل بعد انتهاء الخط الرئيسي!)