كائنات الكاكاو الموزعة، والاستقصاء الطويل، تم إطلاقه و"لا يستجيب" في مراقب النشاط

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

سؤال

سيناريو:

لدي IPC قائم على الكائنات الموزعة بين تطبيق mac وبرنامج خفي تم إطلاقه (مكتوب باستخدام الفئات التأسيسية).نظرًا لأنني واجهت مشكلات من قبل فيما يتعلق بالمراسلة غير المتزامنة (على سبيل المثال.لدي عميل مسجل:على الكائن الجذر للخادم وكلما كان هناك حدث يقوم الكائن الجذر للخادم بإعلام/استدعاء طريقة في كائن الوكيل الخاص بالعميل)، قمت بإجراء استطلاع طويل مما يعني أن العميل "يحصد" قوائم الأحداث/الإشعارات من البرنامج الخفي.ويتم هذا "الحصاد" من خلال استدعاء أسلوب كائن الخادم، والذي يقوم بعد ذلك بإرجاع مثيل NSArray.

إنه يعمل بشكل جيد، حتى لبضع ثوان، تبدأ عملية كائن الخادم (التي يتم إطلاقها من خلال الإطلاق) باللون الأحمر مع علامة "(لا يستجيب)" بجانبها (داخل مراقب النشاط).كما قلت، يعمل بشكل جيد من الناحية الوظيفية، لكننا نريد فقط التخلص من علامة "عدم الاستجابة".

كيف يمكنني منع علامة "لا يستجيب" هذه؟

لمعلوماتك، لقد قمت بالفعل بإجراء عمليات قائمة على الإطلاق من قبل وهذه هي المرة الأولى التي أقوم فيها باستطلاع رأي طويل.لقد قمت أيضًا بتجربة الاتصالات المستندة إلى NSSocketPortNameServer وكذلك الاتصالات المستندة إلى NSSocketPort.لم يكن لديهم هذه المشكلة.لم يكن القفل أيضًا مشكلة لأن الأقفال المستخدمة كانت فقط NSCondition وقمنا بتسجيل البرنامج وتصحيح أخطائه ويبدو أن "مشكلة" القفل الوحيدة تكمن في جزء الحصاد، والذي يعمل في الواقع وظيفيًا.أيضًا، تتم كتابة عملية العميل في PyObjC بينما تتم كتابة عملية الخادم باستخدام ObjC.

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول 3

كانت مشكلتي في الواقع هي الدعوة للحصول على معرف عملية (PID) للعملية باستخدام التوقيع FNDR...تسبب هذا الجزء في حدوث خطأ "عدم الاستجابة" ولم يكن أبدًا جزءًا من الأقفال أو الاستقصاء الطويل.آسف بشأن هذا يا شباب.ولكن الحمد لله لقد وجدت الجواب بالفعل.

نصائح أخرى

عينة عملية معرفة ما يفعله أو ينتظره.

بيتر على صواب في هذا النهج، على الرغم من أنك قد تكون قادرًا على اكتشاف ذلك من خلال فحص بسيط."عدم الاستجابة" يعني أنك لا تقوم بمعالجة الأحداث في قائمة انتظار الأحداث الخاصة بك لمدة 5 ثوانٍ على الأقل (كانت ثانيتين، ولكن تم رفعها في 10.4).بالنسبة لعملية واجهة المستخدم، قد يؤدي ذلك إلى إنشاء مؤشر انتظار دوار، ولكن بالنسبة لعملية لا تتعلق بواجهة المستخدم، فإنك لا ترى التأثيرات بسهولة.

إذا كان هذا برنامجًا يعتمد على حلقة التشغيل، فهذا يعني أنك على الأرجح تفعل شيئًا ما من خلال عملية حظر (متزامنة) يجب إجراؤها باستخدام حلقة التشغيل ورد الاتصال (غير المتزامن).بدلاً من ذلك، تحتاج إلى سلسلة رسائل ثانية لمعالجة عمليات الحظر الخاصة بك حتى يتمكن سلسلة المحادثات الرئيسية الخاصة بك من الاستمرار في الاستجابة للأحداث.

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