ماذا يحدث لتطبيقي عندما يدخل جهاز Mac الخاص بي في وضع السكون؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

عندما ينتقل نظام التشغيل Mac OS X إلى وضع السكون، بسبب إغلاق جهاز كمبيوتر محمول أو تحديد "Sleep" من قائمة Apple، كيف يتم تعليق عملية التنفيذ؟

أفترض أن العمليات غير النافذة يتم تعليقها ببساطة عند نقطة تنفيذ تعسفية.هل هذا صحيح أيضًا بالنسبة لتطبيقات Cocoa، أم أن نظام التشغيل ينتظر حتى يعود التحكم إلى مرسل حلقة التشغيل، ويدخل في وضع السكون في موقع "معروف"؟هل يقوم أي نظام تشغيل حديث بذلك، أم أنه عادة ما يكون آمنًا بدرجة كافية لتعليق التطبيق ببساطة بغض النظر عما يفعله؟

أشعر بالفضول، لأن السماح بالنوم في أي لحظة يعني، من وجهة نظر التطبيق، أن ساعة النظام يمكن أن تقفز فجأة للأمام بمقدار كبير.هذا احتمال لا أفكر فيه عادةً أثناء البرمجة.

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

المحلول

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

يمكنك فتح منفذ kernel والتسجيل في أحداث النوم/الاستيقاظ.في هذه الحالة، سيتلقى تطبيقك حدثًا عندما يريد النظام الدخول في وضع السكون.لديك عدة احتمالات.أحدهما هو الرد عليه، حتى يتقدم النظام.والأمر الآخر هو تعليق النوم؛ومع ذلك، تقول Apple أنه يمكن تعليق بعض الأحداث لمدة 30 ثانية على الأكثر، وبعد ذلك، سيستمر النظام في العمل، سواء أعجبك تطبيقك أم لا.وأخيرًا، يمكنك إلغاء ذلك؛على الرغم من أنه لا يمكن إلغاء جميع الأحداث.إذا قرر النظام بالفعل أنه سيدخل في وضع السكون، فيمكنك فقط تعليق ذلك لمدة 30 ثانية على الأكثر أو السماح به مرة واحدة، ولا يمكنك إلغاؤه.ومع ذلك، يمكنك أيضًا الاستماع إلى حدث، حيث يسأل النظام التطبيقات، إذا كان من المقبول الذهاب إلى النوم الآن، وهناك يمكنك الرد بـ "لا"، مما يؤدي إلى إلغاء النوم.

الفرق بين "هل من الجيد النوم" و"أخطط للنوم" هو:يتم إرسال الأول إذا تم تطبيق إعدادات توفير الطاقة، أي إذا لم يقم المستخدم بتحريك الماوس أو كتابة أي شيء في الوقت الذي تم تكوينه هناك.في هذه الحالة، سيسألك النظام فقط عما إذا كان النوم على ما يرام.سيقول تطبيق مثل Apple DVD Player "لا"، لأنه على الأرجح يشاهد المستخدم قرص DVD وبالتالي لا يتفاعل مع الكمبيوتر، ولا يوجد حتى الآن سبب للنوم.OTOH، إذا أغلق المستخدم جهاز Mac Book الخاص به، فلن تتم مطالبة التطبيقات، وسينتقل النظام إلى وضع السكون بالتأكيد ويبلغ التطبيقات فقط، التي لديها الآن ما يصل إلى 30 ثانية للرد عليها.

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

صفحة Apple بخصوص التقاط هذه الأحداث.

نصائح أخرى

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

أعتقد أنه سيعلق جميع التطبيقات أينما كانت.

تذكر أن هذا يحدث طوال الوقت على أي حال.يتم تعليق التطبيقات واستئنافها باستمرار بسبب تبديل السياق.لذا، في الواقع، يمكن أن تتنقل الساعة بين أي تعليماتين في تطبيقك، على الرغم من أنها لا تكون عادةً بطريقة ملحوظة/مهمة.

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

وإذا قمت بضبط الوقت فإنه يبدو أيضًا وكأنه يقفز للأمام إلى البرامج قيد التشغيل.لا شيء خاص سواء.

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

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