سؤال

لا بد لي من محاكاة لعبة يكون فيها كل لاعب يتحول ويحتاج إلى "الانتباه" لما يحدث.

حتى الآن ، أعلم أنني سأحتاج إلى موضوعين لكل لاعب ، سينام حتى دور اللاعب والآخر اهتمامًا.

سؤالي هو: هل يجب أن أعمل كل لاعب على أنه "شوكة" وخيوط على الشوكة ، أو مجرد إنشاء بعض المواضيع للاعب وربطها بطريقة أو بأخرى؟

هذه هي المرة الأولى التي أعمل فيها مع التزامن ، والرملة والخيوط ، لذلك لست متأكدًا من الممارسات الجيدة وأسلوب البرمجة.

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

المحلول

لقد تعثرت على حواف حرب دينية ضخمة ، تدور حول السؤال

يجب كتابة البرامج التي تعتمد على الحدث باستخدام مؤشرات ترابط متعددة أو باستخدام واحد حلقة الحدث?

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

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

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

قبل المتابعة مع مهمتك ، تعرف على المجموعة الدينية التي ينتميها مدربك.

منذ أن سألت عن المواضيع ، أوصي بشدة بمكتبات المواضيع والقنوات في ديف هانسون ج واجهات وتطبيقات. البرنامج مجاني ، والكتاب يستحق الشراء - ويشمل العديد من الوحدات الأخرى التي ستكون مفيدة بشكل لا يصدق لأي شخص يكتب واجبات الواجبات المنزلية في C.

هل يجب أن أعمل كل لاعب على أنه "شوكة" وخيوط على الشوكة ، أو مجرد إنشاء بعض المواضيع للاعب وربطها بطريقة أو بأخرى؟

ما لم يطلب منك استخدام fork, ، أود تجنب ذلك - آليات التواصل بين عمليات UNIX ليست ممتعة للاستخدام. إذا تمكنت من الحصول على مكتبة Hanson ، فأنا أقول أن إنشاء موضوع لكل لاعب ، وجعل اللاعبين يتواصلون مع بعضهم البعض (ومع خادم اللعبة ، والذي يجب أن يكون أيضًا موضوعًا) باستخدام Hanson's القنوات.

نصائح أخرى

في الموقف القائم على الدوران (اللعبة) ، لا تحتاج في الواقع إلى مؤشرات ترابط ، ستفعل الألياف/coroutines (أفضل).

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

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