PDA

View Full Version : Thread در دلفی



SHilaa
شنبه 08 اردیبهشت 1386, 08:04 صبح
من یه بازی دارم به زبون پاسکال ( بازی 21 با ورق )

حالا میخوام اون بازی رو بزارم تو دلفی طوری که دارای Thread بشه!

شما میدونین چه جوری؟

من هرچی سعی کردم به جایی نرسیدم...

اصلا چه جوری باید کدهای بازی رو بزارم؟؟؟ هرکار میکنم اجرا نمیشه که!


یکی گفت باید یه دکمه استارت بزاری و کد بازیتو کپی کنی اونجا بعدشم یکی از متغیراتو Thread تعریف کنی..

Thread تعریف کردنشو که نفهمیدم اصلا باید چیکار کنم ولی کد بازی هم که گذاشتم کار نمیکنه!!






اگر هم اینو نمیدونین، هر بازی دیگه ای هم که باشه قبوله! فقط باید تو دلفی اجرا بشه و Thread هم داشته باشه!

dkhatibi
شنبه 08 اردیبهشت 1386, 18:20 عصر
اگر منظورتو درست متوجه شده باشم.
ببین با تایمر می تونی اون بازی رو اجرا کنی.
کدهای مناسب را تو رویداد Ontimer بنویس ببین جواب می دن.

ghabil
شنبه 08 اردیبهشت 1386, 22:45 عصر
من یه بازی دارم به زبون پاسکال ( بازی 21 با ورق )

حالا میخوام اون بازی رو بزارم تو دلفی طوری که دارای Thread بشه!
!

اول بگو چقدر پاسکال و دلفی بلد هستی اونوقت بهتر میشه بهت کمک کرد : مثلا احتمالا کد بازیت توی پاسکال اینترفیس رو هم میکشه در حالیکهخ تو دلفی کلا ماجرا فرق داره ....




شما میدونین چه جوری؟

من هرچی سعی کردم به جایی نرسیدم...

اصلا چه جوری باید کدهای بازی رو بزارم؟؟؟ هرکار میکنم اجرا نمیشه که!
!

نه ما میدونیم نه هیچ کس دیگه ای میتونه روی هوا بهت کمک کنه . باید معلوم باشه کدت چی کار میکنه ، والا ساختن یک ترد و اجرا کردنش 3 خط بیشتر کار نداره.
ولی برای اینکه یاد بگیری Helpش رو توی دلفی بخون ضمتا میتونی بری توی New>>Others و یک کلاس Thread جدید بسازی اونوقت توش برات کامنت گذاشته که باید چه کار کنی
هرجایی هم مشکل داشتی ینجا بپرس اگر بتونیم کمکت میکنیم.




یکی گفت باید یه دکمه استارت بزاری و کد بازیتو کپی کنی اونجا بعدشم یکی از متغیراتو Thread تعریف کنی..

Thread تعریف کردنشو که نفهمیدم اصلا باید چیکار کنم ولی کد بازی هم که گذاشتم کار نمیکنه!!


اگر هم اینو نمیدونین، هر بازی دیگه ای هم که باشه قبوله! فقط باید تو دلفی اجرا بشه و Thread هم داشته باشه!

بنظر منکه اگر بجای اینکه فکر این باشی که فقط یکچیزی تحویل بدی ، فکر این باشی که یک چیزی یاد بگیری هم یاد میگیری هم آخرش پروژت رو درست انجام میدی ما در غیر اینصورت با یک چیزی که این و اون میگن فقط بدتر گیج میشی.

SHilaa
یک شنبه 09 اردیبهشت 1386, 07:47 صبح
اول بگو چقدر پاسکال و دلفی بلد هستی اونوقت بهتر میشه بهت کمک کرد : مثلا احتمالا کد بازیت توی پاسکال اینترفیس رو هم میکشه در حالیکهخ تو دلفی کلا ماجرا فرق داره ....

یه چیزایی بلدم. یعنی فکر میکنم اونقدر بلد باشم که اگه چیزی بهم بگین بتونم انجام بدم. البته اگه خیلی قلمبه سلمبه بگین خب شاید بلد نباشم ولی سعی میکنم بفهمم..
آره. میدونم به خاطر همین فرقشه که اجرا نمیشه ولی نمیدونم به جای بعضی از دستوراش چی بزارم. استادمون گفت که میتونی همین کد پاسکالتو تو دلفی بزاری. خب اونم میدونه که به این راحتی نیست پس چرا هیچی نگفت؟





نه ما میدونیم نه هیچ کس دیگه ای میتونه روی هوا بهت کمک کنه . باید معلوم باشه کدت چی کار میکنه ، والا ساختن یک ترد و اجرا کردنش 3 خط بیشتر کار نداره.
ولی برای اینکه یاد بگیری Helpش رو توی دلفی بخون ضمتا میتونی بری توی New>>Others و یک کلاس Thread جدید بسازی اونوقت توش برات کامنت گذاشته که باید چه کار کنی
هرجایی هم مشکل داشتی ینجا بپرس اگر بتونیم کمکت میکنیم.

کد من؛ کد یک بازی 21 هست بدن گرافیک ( اصلا بازی 21 رو بلدین؟ ).
1 نفر با کامپیوتر بازی میکنه.
ابتدا نوع متغیرها تعریف شده. برای کارتها و خالها هم یک آرایه تعریف شده. بعد هم تابعهایی برای شروع بازی، گرفتن کارت، گرفتن خال و محاسبه امتیاز نوشته شده و بعد هم متن اصلی برنامه شروع میشه... که شرایط برنده شدن رو نوشته که هر کدوم زودتر امتیازشون به 21 برسه برنده میشه.. و درآخر هم برنده، بازنده، یا مساوی رو چاپ میکنه..

تابعها و دستوراتش هم دقیقا همون دستورهای ساده پاسکاله که خواجه حافظ شیرازی هم بلده..

در ضمن از تابع رندوم هم برای کارتها و خالها استفاده میکنه..

دیگه نمیدونم چی باید بگم. چیز دیگه ای هم اگه لازمه بگین من جواب میدم! :افسرده:


بنظر منکه اگر بجای اینکه فکر این باشی که فقط یکچیزی تحویل بدی ، فکر این باشی که یک چیزی یاد بگیری هم یاد میگیری هم آخرش پروژت رو درست انجام میدی ما در غیر اینصورت با یک چیزی که این و اون میگن فقط بدتر گیج میشی.
من اول به فکر این نبودم که یه چیزی تحویل بدم. همین بازی پاسکالش هم با بدبختی ردیف کردم. ولی وقتی دیدم هرکار میکنم نمیشه گفتم شاید با یه بازی دیگه بشه.
چون زمان محدوده، ممکنه تا 6 سال دیگه هم کسی اینجا جواب منو نده خب!! :( اونوقت من چه خاکی تو سرم بریزم؟؟

من باید در کل یه بازی تو دلفی داشته باشم که توش یا تایمر یا ترد یا سمافور داشته باشه..
که اگه با همین بازی 21 خودم بشه بهتره. اگرم نمیشه که هرچی شما بگین..

ghabil
یک شنبه 09 اردیبهشت 1386, 13:40 عصر
آره. میدونم به خاطر همین فرقشه که اجرا نمیشه ولی نمیدونم به جای بعضی از دستوراش چی بزارم. استادمون گفت که میتونی همین کد پاسکالتو تو دلفی بزاری. خب اونم میدونه که به این راحتی نیست پس چرا هیچی نگفت؟
کد من؛ کد یک بازی 21 هست بدن گرافیک ( اصلا بازی 21 رو بلدین؟ ).
1 نفر با کامپیوتر بازی میکنه.
ابتدا نوع متغیرها تعریف شده. برای کارتها و خالها هم یک آرایه تعریف شده. بعد هم تابعهایی برای شروع بازی، گرفتن کارت، گرفتن خال و محاسبه امتیاز نوشته شده و بعد هم متن اصلی برنامه شروع میشه... که شرایط برنده شدن رو نوشته که هر کدوم زودتر امتیازشون به 21 برسه برنده میشه.. و درآخر هم برنده، بازنده، یا مساوی رو چاپ میکنه..

این که استادتون چرا هیچی نگفت رو از خودش بپرسید. اما اینکه اصلا اینترفیس گرافیکی نداره خب خیلی کمک میکنه ، اما دیگه حداقل توی پاسکال Writeln کرده که اینجا در بدترین حالت شما باید چهارتا Label بزارید نوشته ها رو روشون نشون بدین.




من اول به فکر این نبودم که یه چیزی تحویل بدم. همین بازی پاسکالش هم با بدبختی ردیف کردم. ولی وقتی دیدم هرکار میکنم نمیشه گفتم شاید با یه بازی دیگه بشه.
چون زمان محدوده، ممکنه تا 6 سال دیگه هم کسی اینجا جواب منو نده خب!! :( اونوقت من چه خاکی تو سرم بریزم؟؟


نیازی به خاک به سر ریختن نیست، بنظر من تو کل دوره دانشگاه اگر گلی به سر کسی زده بشه همین چهارتا دونه پروژه ای هست که میدن والا بقیش که .... پس همین چهارتا ارزش وقت گداشتن و کار کردن دارند .



من باید در کل یه بازی تو دلفی داشته باشم که توش یا تایمر یا ترد یا سمافور داشته باشه..
که اگه با همین بازی 21 خودم بشه بهتره. اگرم نمیشه که هرچی شما بگین..

ببین سمافور و ترد در شرایطی استفاده میشوند که چندتا کار همزمان انجام میشند اما بازیهای که تو انتخاب کردی Turn Based هستند ، یعنی نوبتی باید کارها رو انجام بده برنامت پس عملایک پروسه کافی هست و نیازی به مالتی ترد نیست.

حالا پیشنهاد ؛
1) میتونی یک بازی یا برنامه ای که واقعا نیاز به مالتی تردینگ داره انتخاب کنی یک چیزی شبیه همون غذا خودرن فیلسوفها خب معروفترین مثال برای نوشتن برنامه های اینجوری هست یا مثلا اجسامی که توی صفحه حرکت میکنند و کابر مثلا باید با بردم موس روی آنهاا بهشون شلیک کنه.

2) همین بازی رو برداری ، با توجه به اینکه میشناسیش و کدش رو هم داری ، اول درست کردن یک ترد رو یاد بگیری بعد تصمیم بگیری که میخوای اینترفیست چه شکلی باشه و قشنگ کامپونتها رو توصفحه بزاری بعد هم کد بازی رو با توجه به صفحه بزاری توی یک ترد که مثلا ترد اجراش کنه.

21 هم بلدم ولی نمیدونم چرا باوجود پکر مردم 21 بازی میکنند!

SHilaa
سه شنبه 11 اردیبهشت 1386, 14:16 عصر
ببین سمافور و ترد در شرایطی استفاده میشوند که چندتا کار همزمان انجام میشند اما بازیهای که تو انتخاب کردی Turn Based هستند ، یعنی نوبتی باید کارها رو انجام بده برنامت پس عملایک پروسه کافی هست و نیازی به مالتی ترد نیست.

حالا پیشنهاد ؛
1) میتونی یک بازی یا برنامه ای که واقعا نیاز به مالتی تردینگ داره انتخاب کنی یک چیزی شبیه همون غذا خودرن فیلسوفها خب معروفترین مثال برای نوشتن برنامه های اینجوری هست یا مثلا اجسامی که توی صفحه حرکت میکنند و کابر مثلا باید با بردم موس روی آنهاا بهشون شلیک کنه.

2) همین بازی رو برداری ، با توجه به اینکه میشناسیش و کدش رو هم داری ، اول درست کردن یک ترد رو یاد بگیری بعد تصمیم بگیری که میخوای اینترفیست چه شکلی باشه و قشنگ کامپونتها رو توصفحه بزاری بعد هم کد بازی رو با توجه به صفحه بزاری توی یک ترد که مثلا ترد اجراش کنه.

21 هم بلدم ولی نمیدونم چرا باوجود پکر مردم 21 بازی میکنند!

خب اگه گزینه اولو انتخاب کنم فکر میکنم خیلی سخت بشه. البته بدم نمیاد یه چیز توپ درست کنم و تحویل استاد بدم... ولی چیزی که هست من دلفی بلدم ولی در سطح ابتدایی؛ این ترد و سمافور و اینارو هنوز نتونستم درست و حسابی بفهمم چی هستن!

این مالتی ترد هم نمیدونم چیه. فقط میدونم باید یه بازی با دلفی بنویسیم که توش ترد داشته باشه!

بازم هرچی نظر شماست. اگه واقعا کمکم میکنین و من مطمئن باشم که میدونو خالی نمیکنین ؛ حاضرم پا به پای شما همه چی رو باد بگیرم و انجام بدم.



نظرتون چیه؟!

ghabil
سه شنبه 11 اردیبهشت 1386, 15:58 عصر
این مالتی ترد هم نمیدونم چیه. فقط میدونم باید یه بازی با دلفی بنویسیم که توش ترد داشته باشه!

بازم هرچی نظر شماست. اگه واقعا کمکم میکنین و من مطمئن باشم که میدونو خالی نمیکنین ؛ حاضرم پا به پای شما همه چی رو باد بگیرم و انجام بدم.

نظرتون چیه؟!

اینکه تصمیم بگیری که یاد بگیری و یک کاره خوب ارائه بدی که واسه خودت هم یک چیزی داشته باشه خیلی تصمیم خوبیه.

اما فقط حواست باشه قرار نیست پابه پای کسی پروژه رو انجام بدی قراره خودت بری بخونی یاد بگیری و سعی کنی پروژت رو کامل کنی هرجا هم به مشکل خوردی و نیاز به کمک داشتی دوستان زیادی اینجا هستند که حتما بهت کمک خواهند کرد و از این لحاظ میتونه خیالت راحت باشه.

البته کلا کاری هم که میخوای بکنی کار خیلی سختی نیست و با یکمی پشتکار انجام میشه انشاا....

SHilaa
سه شنبه 11 اردیبهشت 1386, 23:05 عصر
اینکه تصمیم بگیری که یاد بگیری و یک کاره خوب ارائه بدی که واسه خودت هم یک چیزی داشته باشه خیلی تصمیم خوبیه.

اما فقط حواست باشه قرار نیست پابه پای کسی پروژه رو انجام بدی قراره خودت بری بخونی یاد بگیری و سعی کنی پروژت رو کامل کنی هرجا هم به مشکل خوردی و نیاز به کمک داشتی دوستان زیادی اینجا هستند که حتما بهت کمک خواهند کرد و از این لحاظ میتونه خیالت راحت باشه.

البته کلا کاری هم که میخوای بکنی کار خیلی سختی نیست و با یکمی پشتکار انجام میشه انشاا....
خب میشه بگین من الآن باید چیکار کنم؟
از کجا باید شروع کنم؟ :گریه: :گریه:

SalarSoft
چهارشنبه 12 اردیبهشت 1386, 07:42 صبح
برای شروع می تونی از کامپوننت Thread worker استفاده کنی:
http://salarsoft.somee.com/downlist/comp_downloads.htm#threadworker
و می تونی نحوه پیاده سازی thread رو در اون ببینی

ghabil
چهارشنبه 12 اردیبهشت 1386, 09:59 صبح
اول باید مفهوم ترد رو یاد بگیری و اینکه چرا ازش استفاده میکنیم. هم تو کتاب سیستم عامل نوشته هم توی اینترنت پر مقاله و توضیح و مثال هست. که البته یک مقاله کوچیک هم بخونی کفایت میکنه. حتی توی کتابهای دلفی هم معمولا با مثال توضیح میدند.
بعد باید مفهوم Shared REsource و Critical Section ها رو یاد بگیری که اینا هم برعکس اسماشون مفاهیم ساده و کاملا قابل فهمی هستند و باز هم توی کتاب سیستم عامل دانشگاهیتون کاملا توضیح داده شدند.
بعد میتونی یک سناریو بازی تعریف کنی مثلا من پیشنهاد میکنم سه تا عکس مثلا پرنده که روی یک فرم جاشون با سرعتهای مختلف عوض میشه و کاربر باید سعی کنه موس رو ببره روشون و کلیک کنه . حرکت هر عکس روی فرم رو یک ترد انجام میده و مثلا برای اینکه پرنده ها با هم همزمان حرکت نکنند میتونی از یک CriticalSection یا سمافور استفاده کنی...

استفاده از کامپوننت رو بهت پیشنهاد نمیکنم، چون کسانی که از کامپونت استفاده میکنند فقط کار با کامپوننت رو یاد میگیرند نه کاری که کامپوننت میکنه.

بازم میگم کل اینکارایی که نوشتم برعکس چیزی که ممکنه به نظر بیان خیلی ساده هستند.

SHilaa
شنبه 15 اردیبهشت 1386, 07:54 صبح
اول باید مفهوم ترد رو یاد بگیری و اینکه چرا ازش استفاده میکنیم. هم تو کتاب سیستم عامل نوشته هم توی اینترنت پر مقاله و توضیح و مثال هست. که البته یک مقاله کوچیک هم بخونی کفایت میکنه. حتی توی کتابهای دلفی هم معمولا با مثال توضیح میدند.
بعد باید مفهوم Shared REsource و Critical Section ها رو یاد بگیری که اینا هم برعکس اسماشون مفاهیم ساده و کاملا قابل فهمی هستند و باز هم توی کتاب سیستم عامل دانشگاهیتون کاملا توضیح داده شدند.
بعد میتونی یک سناریو بازی تعریف کنی مثلا من پیشنهاد میکنم سه تا عکس مثلا پرنده که روی یک فرم جاشون با سرعتهای مختلف عوض میشه و کاربر باید سعی کنه موس رو ببره روشون و کلیک کنه . حرکت هر عکس روی فرم رو یک ترد انجام میده و مثلا برای اینکه پرنده ها با هم همزمان حرکت نکنند میتونی از یک CriticalSection یا سمافور استفاده کنی...

استفاده از کامپوننت رو بهت پیشنهاد نمیکنم، چون کسانی که از کامپونت استفاده میکنند فقط کار با کامپوننت رو یاد میگیرند نه کاری که کامپوننت میکنه.

بازم میگم کل اینکارایی که نوشتم برعکس چیزی که ممکنه به نظر بیان خیلی ساده هستند.

چه سخت! :افسرده:

ولی مرسی هوارتا

خبرت میکنم پس! :کف: