PDA

View Full Version : thread?



khafanovich
یک شنبه 14 تیر 1383, 07:33 صبح
سلام دوستان خسته نباشید.
در یک برنامه procedure ی داریم که خیلی پروسس به خود اختصاص میدهد و برنامه فیریز میشود.چگونه میتوان یک ترد ایجاد کرد و اجرای این پروسیجر را به آن نسبت داد.؟
ممنون.

JavanSoft
یک شنبه 14 تیر 1383, 13:21 عصر
از سایت Www.JavanSoft.Com

برنامه پروسسهای همزمان رو که یک مثال است بگیرید

vcldeveloper
سه شنبه 16 تیر 1383, 00:43 صبح
برای استفاده از Thread شما می تونید در دلفی از پنجره New در منوی فایل گزینه Thread Object رو انتخاب کنید. با انجام این کار یک یونیت جدید برای Thread مورد نظر ایجاد میشه. در این یونیت یک شی از نوع TThread وجود داره که در واقع همون Thread شما ست.
در قسمت Protected از این شی یک متد به اسم Execute وجود داره. شما می تونید کدی را که قصد دارید از طریق Thread اجرا کنید در این متد قرار بدید.
دقت کنید که رابط کاربر اشیاء VCL قابل دسترسی از Threadهای فرعی برنامه نیستند. اگر کد شما موجب تغییر رابط کاربر میشه یا باید نتایجش در رابط کاربر نمایش داده بشه یک راه اینه که کدهای مربوط به رابط کاربر را در یک Procedure جدا قرار بدید و هر وقت قصد تغییر رابط کاربر را داشتید Procedure مورد نظر را از طریق متد Syncronize فراخوانی کنید تا آن پروسیجر از داخل Thread اصلی برنامه اجرا شود.

برای اجرای Thread هم می تونید از کد زیر یا کدی مشابه آن در یونیت اصلی برنامه استقاده کنید:


procedure TForm1.Button1Click(Sender : TObject);
var
AThread : TThread;

begin
AThread := TThread.Create(False);
end;

کد بالا بطور اتوماتیک متد Execute را فعال می کند. بعد از اتمام این متد ، Thread بسته می شود.
البته کار با Thread ها گرفتاریهای خودش رو داره و شما بهتره قبل از شروع کارتون توی این زمینه کمی مطالعه کنید.

در ضمن اگر قصد شما فقط جلوگیری از فریز شدن برنامه هست، نیازی به Thread ندارید و می تونید Application.ProcessMessages رو در Procedure خودتون اجرا کنید تا از فریز شدن برنامه جلوگیری بشه !

RK977877
چهارشنبه 28 شهریور 1386, 07:58 صبح
میشه یه مثال کوچک یا یک فایل ضمیمه در این تایپیک قرار دهید
با تشکر