تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 3 از 3

نام تاپيک: درخواست نحوه پیاده سازی thread ها و ....

  1. #1
    اگه نباشه جاش خالی می مونه delphianddotnet's Avatar
    تاريخ عضويت
    Jan 2007
    پست ها
    438

    پيش فرض درخواست نحوه پیاده سازی thread ها و ....

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

  2. #2
    پروفشنال
    تاريخ عضويت
    Jul 2006
    محل سكونت
    گیلان _ رشت
    پست ها
    635

    پيش فرض

    سلام
    من قبلا قول آموزش این بحث رو داده بدم ولی متاسفانه وقت نشد ( راستش یه بار نوشتم ، دیگه آخراش بود ، برق رفت و دیگه بی خیال شدم ، یعنی وقت نکردم ) ...
    ولی الان دیگه می نویسم ...
    خوب ...
    برای شروع کار اول باید یک کلاس از نوع 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 ( ادامه ) کردیم ...
    امیدوارم توضیحات مفید باشه ...
    یه نمونه هم برات گذاشتم :
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    موفق باشی ...

  3. #3
    اگه نباشه جاش خالی می مونه delphianddotnet's Avatar
    تاريخ عضويت
    Jan 2007
    پست ها
    438

    پيش فرض

    سلام
    محمود جان دستت درد نكنه واقعا" عالي بود.
    ميتوني برام يه مثال از مولتي تاير ها بزني و برام بفرستي(خصوصي)
    موفق باشيد

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •