واضح آرشیو وب فارسی:سایت ریسک: delphianddotnet28-03-2007, 10:37 AMسلام تا حدودی برنامه نویسی چند لایه رو بلدم .حالا میخوام نحوه پیاده سازی thread ها و اینکه چطوری باید با اونا کار کنیم رو میخوام بدونم.اگه مثال جامع و کامل همراه با توضیح بدید ممنون و سپاسگزار میشم Mahmood_N31-03-2007, 02:03 AMسلام من قبلا قول آموزش این بحث رو داده بدم ولی متاسفانه وقت نشد ( راستش یه بار نوشتم ، دیگه آخراش بود ، برق رفت و دیگه بی خیال شدم ، یعنی وقت نکردم ) ... ولی الان دیگه می نویسم ... خوب ... برای شروع کار اول باید یک کلاس از نوع TThread تعریف کنی ... به کد زیر نگاه کن : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! توی یک بالا یک نوع از TThread ، به عنوان Thread مورد نظر معرفی شد ... خوب حالا باید متغیر ها و کدهایی که توی استفاده از اون به کار می رند رو مشخص کنیم ... برای تعریف متغیر ها ( البته اگه برای استفاده نیاز به متغیر داری ! ) ، باید اون رو بر حسب نیاز در قسمت Private یا Public تعریف کنی ... به کد زیر نگاه کن : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در قسمتهای Private و Public می تونی Procedure ها رو هم تعریف کنی ... مثلا فرض کن می خوایم یک برنامه بنویسیم که یک فایلی رو از Source ( منظور متغیریه که تعریف میکنیم و مسیر فایل مبدا رو می دیم بهش ) به Destination ( منظور متغیره که تعریف میکنیم و مسیر مقصد رو بهش میدیم ) کپی کنه و همچنین فرض کن برنامه ما یک شی Gauge داره که کپی شدن فایل رو به صورت Progress نمایش می ده ( میشه به جای Gauge از ProgressBar هم استفاده کرد ) ... برای این کار باید یک متغیر از نوع String به نام Source ( مسیر مبدا ) و همچنین یک متغیر به نام Destination ( مسیر مقصد ) تعریف کنیم ... چون باید در جاهایی ( منظور Procedure ها است ) ، غیر از Procedure های مربوط به خود Thread از اونها استفاده کنیم ( برای مقدار دهی ) پس اونها رو در قسمت Public تعریف میکنیم ... بعد از تعریف این متغیرها به چند تا Procedure جدا احتیاج داریم که کارها رو انجام بدند ( کارهایی مثل Progress کردن Gauge و کار اصلی که همون کپی فایل هست ) ... چون نیازی به دستکاری این Procedure ها در جاهای دیگه نیست ، پس اونها رو در قسمت Private تعریف میکنیم ... البته متد ( Procedure ) اصلی که کار کپی رو انجام میده در قسمت Protected قرار می گیره ( بعدا توضیح میدم ) ... تمام Thread ها یک Event دارن به نام OnExecute ( هنگام اجرا شدن ) که کار اصلیشون باید در همون Event باشه ، در توضیحات بالا منظورم از Procedure اصلی همین Event هست ... کد زیر رو ببین : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! در قسمت Private که مشخصه ( متغیرها تعریف شدند ) ، در قسمت Public ما 2 تا Procedure تعریف کردیم ، یکی برای Progress کردن Gauge و یکی هم برای نمایش پیغام ... و در قسمت Protected هم متد Execute رو معرفی کردیم که کد اصلی توی اون قرار میگیره ... اگه دقت کرده باشی ، در مقابل متد Execute ، کلمه Override نوشته شده ، هدف از نوشتن این کلمه اینه که متد اصلی Execute مربوط به خود Thread رو از بین ببره و از متد جدید استفاده کنه ... خوب تا اینجا ما Thread رو ساختیم ، حالا باید کدهای مربوط به Procedure ها رو بنویسیم ، برای هر کدم کد مربوطه رو می نویسیم : برای Progress : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! برای ShowMsg : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! برای استفاده از کد بالا باید یک متغیر از نوع String به نام Mess ( مقدار متن پیغام رو بهش میدیم ) تعریف کنی ( هر جا که خواستی ، توی کد مربوط به فرم یا توی قسمت Private یا Public مربوط به Thread ) تا پیغام دلخواهت رو نشون بدی ... حالا کد اصلی رو توی Procedure مربوط به Execute می نویسیم : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اگه به کد بالا دقت کنی ، برای فرخوانی توابع تعریف شده ( همون Progress و ... ) از تابع Synchronize استفاده شده ، این تابع درواقع کارش همینه و برای استفاده از Procedure های تعریف شده در یک Thread ، در داخل متد Execute ، باید اید از همین تابع استفاده بشه ( تابع Synchronize رو مینویسیم و بعد نام تابع رو در داخل پرانتز می نویسیم ) ... می تونی آخر کد بالا ، تابع Synchronize رو برای نمایش پیغام ( (Synchronize(ShowMsg ) ، بنویسی و پایان کار رو نشون بدی ... توی کد بالا و در حلقه While ، یعنی مهم ترین مرحله از کپی فایل ، ما چک میکنیم ، که Thread ما Terminate شده یا نه ، مثلا فرض کن ما داریم یک فایل رو کپی می کنیم ، حالا کاربری که داره با برنامه کار میکنه ، روی دکمه Cancel که ما برای متوقف کردن عملیات کپی گذاشتیم کلیک میکنه ، اینجاست که باید Thread ما Terminate بشه و در حلقه ای که توی کد بالا بود ، ما چک میکنیم که اگه Thread ما Terminate شده بود ، از حلقه خارج می شیم ( با دستور Break ) توجه : برای شروع عملیات کپی ( وقتی که روی دکمه مثلا Copy در برنامه کلیک می شه ، باید Thread رو ساخته و کار اون رو شروع کنی ) ، به کد زیر نگاه کن : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! توی کد بالا در خط اول متغیری که رو که در قسمت Var تعریف کریدم ، به Thread خودمون نسبت میدیم و همزمان اون رو Create میکنیم ... اون True ای که توی پرانتز نوشته شده ، برای اینه که در هنگام ساخت Thread مقدار Suspended اون True باشه ، یعنی به صورت Stop شده ساخته بشه تا بلافاصله بعد از ساخته شدن اجرا نشه !! ، بعد از کمی کار کردن با Thread ها مفهوم اینها رو بهتر می فهمی ، فقط این رو بگم که Thread ها یه جورایی شبیه به تایمر هستند ... توی خط دوم ما خصوصیت FreeOnTerminate مربوط به Thread رو True کردیم ، هدف از این کار اینه که بعد از Terminate کردن ، Thread آزاد بشه و از بین بره ... توی خطهای 3 و 4 هم مسیرهای مبدا و مقصد رو مشخص کردیم و د خط پنجم کار Thread رو شروع کردیم ، یعنی در هنگام ساخته شدن ، اون رو Stop کردیم و بعد Resume ( ادامه ) کردیم ... امیدوارم توضیحات مفید باشه ... یه نمونه هم برات گذاشتم : http://mahmoodn.persiangig.com/document/Delphi/Thread.rar موفق باشی ... delphianddotnet05-04-2007, 11:57 AMسلام محمود جان دستت درد نكنه واقعا" عالي بود. ميتوني برام يه مثال از مولتي تاير ها بزني و برام بفرستي(خصوصي) موفق باشيد سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 355]