الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن طريقة عمل التعاودية

بدأه Hisham_IT في 17 أبريل 2011 · 4 رد · 661 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...

لدي بضعة اسئلة...

عندما اقوم باستدعاء الميثود عدة مرات تعاوديا...كيف تتعامل الذاكرة مع هذا النوع من الاستدعاء...اعلم انها تقوم بها عن طريق مفهوم ال stack و لكن كيف..و كيف تميز بين كل استدعاء و الاخر

وسؤال اخر..هل يقوم الكومبايلر بتسمية حجرة من الذاكرة باسم الميثود و يقوم بوضع جميع المتغيرات داخل هذه الحجرة؟؟؟!!!!!!

و لكم جزيل الشكر..

Currently working on ASP.net ..... come Back Soon

#2
Hisham_IT كتب:

السلام عليكم...

لدي بضعة اسئلة...

عندما اقوم باستدعاء الميثود عدة مرات تعاوديا...كيف تتعامل الذاكرة مع هذا النوع من الاستدعاء...اعلم انها تقوم بها عن طريق مفهوم ال stack و لكن كيف..و كيف تميز بين كل استدعاء و الاخر

وسؤال اخر..هل يقوم الكومبايلر بتسمية حجرة من الذاكرة باسم الميثود و يقوم بوضع جميع المتغيرات داخل هذه الحجرة؟؟؟!!!!!!

و لكم جزيل الشكر..

أهلاً أخي الكريم،

مالذي تقصده بـ( تعاودياً)؟

راجع الرابط التالي لتجد إجابة لسؤالك الثاني: Lifetime

The important thing is not so much

that every child should be taught,

as that every child should be given the wish to learn.

#3

السلام عليكم ورحمه الله وبركاته

كيفية عمل التعاوديه

كمقدمه للتعاوديه نفترض مثال عرض كل الملفات في قرص معين - او قسم معين من ملفات النظام - الآن سنخوض في تفاصيل عمل التعاوديه لنفترض اننا سنقوم بطبع جميع الملفات الموجوده في قرص معين كما هو موضح في الشكل:

post-240106-088025900 1303000914_thumb.p

في مثالنا الأسامي التي تبدأ بحرف كبير هي المجلدات مع فراغات تبين مستوى المجلد, notepad.exe,browser.exe و Utility موجوده داخل النجلد Programs و ال chars.exe داخل المجلد Utility, logfile.txt يحتوي نفس الفراغات التي يحتويها myfile.txt الموجود على القرص c:

الان لنفترض ايش يحدث عندما نستدعي الاجراء التعاودي لفحص القرص. في البدايه نستدعي الاجراء listFilesInDirectory() ونمرر له اسم المجلد c: , بعدها اجرائنا يقوم باستدعاء الاجراء listFiles() ونحصل على قائمه من الملفات والمجلدات الموجوده في القرص c:. الاجراء يبدأ في الدوران حول هذه القائمه ويقوم بطباعه اسامي الملفات. بسيط حتى نصل إلى المجلد Programs في هذه اللحظه نقوم باجراء تعاودي ونستدعي listFilesInDirectory(). طبعا الاستدعاء سيعود وعندما يعود نحتاج لمعرفه "اين وصلنا" في قائمه الملفات تبع القرص c: ونستمر ف العرض من logfile.txt.

الكدس Stack

لتذكر اين وصلنا ,البرنامج يحتوى على كدس وهي منطقه في الذاكره لمعرفه "اي يجب ان نعود" كل وقت يستدعي فيها البرنامج الاجراء, وكل مسلك Thread له كدس خاص به لأن هناك مجموعه من ال Threads تشتغل ويقوم ال Thread بالاستدعاء منفصل عن الاخر. تخيلها مثل مجموعه من الملاحظات على الاوراق عندما البرنامج يستدعي اجراء معين يقوم البرنامج بكتابه ملحوظه عن نفسه ويدون فيها قيم كل المتغيرات داخل الاجراء في هذه اللحظه بالاضافه الي موقع الرجوع في الاجراء نفسه. بعدها يقوم بالتدوين في اعلى هذه الرزمه او الكدس واستدعاء الداله.

استدعاء قائمه محتويات المجلد Programs والذهاب بعدها الى المجلد الفرعي Utility يقوم باستدعاء اخر, لذلك مره اخرى يقوم بالتدوين في اعلى ال Stack وبعد انتهاء الاستدعاء من محتويات المجلد Utility يقوم بالغاء التدوين الموجود في اعلى ال Stack مخبرا بيئه التشغيل اين هو بالضبط في معالجه المجلد Programs للرجوع وبعد الانتهاء من المجلد, التدوين الموجود اعلى ال Stack يلغى معناته رجعنا الى المكان الذي وقفنا فيه في القرص c: وسوف يقوم بطباعه الملف logfile.txt وينهي الاستدعاء منهياً العمليه بكاملها.

وفي الختام اعتذر لأنه الترجمه العربيه للمصلحات بعض الاحيان متعبه وتكون غريبه شوي

بالتوفيق

المرفقات
File Structure.png

تم تعديل هذه المشاركة بواسطة VB Helper في 17 أبريل 2011 في 03:42

.:: Wish to become better and better ::.

#4

شكرا لك اخي vb helper على الرد المفيد...قد و صلت فكرتك

Currently working on ASP.net ..... come Back Soon

#5

السلام عليكم ورحمه الله وبركاته

لا شكر على واجب

.:: Wish to become better and better ::.

مواضيع مشابهة