هل من الممكن إنشاء خيط حقيقي غير محدد (قابل للانضمام) في iPhone OS؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

أتساءل ماذا سيحدث عندما أقوم بإنشاء موضوع قابل للانضمام لكتابة بعض البيانات الكبيرة إلى "القرص". الآن ، تقول المستندات إنه يمكنني القيام بذلك باستخدام مؤشرات ترابط POSIX. لطيف - جيد! ولكن: قال رجل آخر في Apple ، إن التطبيق لديه 5 ثوانٍ أو نحو ذلك للاستقالة عندما يضغط المستخدم على زر الصفحة الرئيسية. لذا ، فأفهمي ، فإن الخيط "الحقيقي" غير المتواصل لديه معنى لمنع فساد البيانات ، ولكن عندما يقتل نظام التشغيل iPhone العملية بعد 5 ثوانٍ على أي حال ، فإن ذلك لن يكون له معنى كبير.

ولكن: بدون خيوط غير محفوظة ، هل سيتوقف التطبيق على الفور بدلاً من القتل بعد 5 ثوان؟ أم أن هذه مجرد أسطورة سيئة ، وسوف يتأكد خيط Posix القابل للانضمام إلى البيانات تمامًا قبل أن يتوقف التطبيق؟

لا تقلق ، لا أخطط لإنشاء شيء من شأنه أن يمنع المستخدم من ألا يتمكن من إيقاف تشغيل التطبيق. أنا فقط أريد أن أحصل على هذا بشكل صحيح.

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

المحلول

لست متأكدًا مما إذا كان استخدام مؤشر ترابط قابل للانضمام يسمح لك بتأجيل إنهاء التطبيق حتى يتم الانتهاء من مؤشر ترابطك وينضم إليه. على الاغلب لا. يمكنك استخدام مؤشرات ترابط POSIX بدلاً من nsthread أو nsoperation/nsoperationqueue ، ولكن لا يزال يتعين عليك مراعاة إمكانية إنهاء المستخدم.

الآن ، قد يحدث الإنهاء بواحدة من طريقتين محتملين:

1) يتلقى التطبيق إشارة sigterm التي يمكنك اعتراضها من خلال ApplicationWillRight: الطريقة ، التي هي بعد ذلك معالج إشارة sigterm ؛

2) يتلقى التطبيق Sigkill: في هذه الحالة ، لا يمكنك التقاط الإشارة من خلال معالج الإشارة ولا يُسمح لك (بالطبع) بتجاهلها وضع تصرف الإشارة.

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

لإدارة هذا ، يجب أن تبذل قصارى جهدك (تعتمد على التطبيق بالطبع) لإنقاذ حالة التطبيق من الناحية الذرية وبأسرع وقت ممكن ، ويجب أن تكون مستعدًا لإلغاء موضوع POSIX الخاص بك (عندما يصل إلى واحدة من نقاط الإلغاء المحتملة) وتراجعك حسب الحاجة من أجل التنظيف قبل الخروج.

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