PDA

View Full Version : سوال: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا



farzad1343
جمعه 13 مرداد 1396, 22:05 عصر
سلام و عرض ادب
من دریک برنامه بانک اطلاعاتی تحت شبکه با دو آی پی استاتیک در دو نقطه مختلف شهر به دلیل دیر باز شدن جداول اقدام به ایجاد thread کردم
تا باز شدن جداول جلوی کار با فرمها رو نگیره همه چیز درست کار میکنه فقط هنگام بستن برنامه ترد آزاد نمیشه و برنامه هنگ میکنه
کدها رو در پایین میذارم اگه میشه راهنمایی بفرمایید
type
TOpenTable = class(TThread)
private


protected
procedure execute;override;


{ TOpenTable }


procedure TOpenTable.execute;
begin
if not dm.TBranch.Active then dm.TBranch.Open;
if not dm.dr.Active then dm.dr.Open;
if not dm.TCL.Active then dm.TCL.Open;
if not dm.TFrame.Active then dm.TFrame.Open;
DM.TGlass.OrderFields := 'NAmeG ASC,sfer ASC,cilander ASC';
if not dm.TGlass.Active then dm.TGlass.Open;
if not dm.TMotafaregheh.Active then dm.TMotafaregheh.Open;
if not dm.Tsms.Active then dm.Tsms.Open;
if not dm.TbTypeGlass.Active then dm.TbTypeGlass.Open;
if not dm.Grooh_G.Active then dm.Grooh_G.Open;
if not dm.Bimeh.Active then dm.Bimeh.Open;


Terminate;
Exit;
end;





var
DM: TDM;
myOpentable:TOpenTable;
implementation
procedure TDM.DataModuleCreate(Sender: TObject);
begin


myOpentable:=TOpenTable.Create(True);
myOpentable.FreeOnTerminate:=true;
myOpentable.Resume;
end;

Mask
شنبه 14 مرداد 1396, 09:08 صبح
اصلا همینکه کار میکنه باید خدارو شکر کنید.
قوانین ترد اصلا در کدتون لحاظ نشده.
شما در ترد جانبی حق دسترسی به ابجکتهای روی فرم رو ندارید. باید بصورت رانتایم تولیدشون کنید در بدنه ترد و سپس در همانجا ازادشون کنید.

farzad1343
یک شنبه 15 مرداد 1396, 16:58 عصر
نا امیدم کردی بزرگوار
میشه بیشتر توضیح بدید
من هدفم اینه که باز کردن جداول زمان زیادی رو میبره داخل ترد انجام بشه و جلوی کار کردن با فرمها رو نگیره
ایا راهکار بهتری هم پیشنهاد میکنید
سرور در یک طرف شهر و کلاینت طرف دیگر هست
اصلا همینکه کار میکنه باید خدارو شکر کنید.
قوانین ترد اصلا در کدتون لحاظ نشده.
شما در ترد جانبی حق دسترسی به ابجکتهای روی فرم رو ندارید. باید بصورت رانتایم تولیدشون کنید در بدنه ترد و سپس در همانجا ازادشون کنید.

Felony
پنج شنبه 19 مرداد 1396, 10:19 صبح
در مورد ترد ساختان چند ده بار سوال پرسیده شده و نمونه هایی قرارداده شده - سرچ کنید .
معماری که دارید سیستون رو بر پایش توسعه میدید کلا مشکل داره - مثلا هم که ترد رو اضافه کردید جداول سنگین شدن کاربر باید مثلا ۵ دقیقه با یه فرم خالی بازی کنه تا دیتا توش لود بشه ؟!
بحث پیجینگ رو به query هاتون اضافه کنید و رکوردها رو مثلا ۵۰ تا ۵۰ تا درخواست بدید و لود کنید .

farzad1343
پنج شنبه 19 مرداد 1396, 21:28 عصر
ممنونم از دوستانی که جواب دادن و به تک تک توصیه های کاربردی شما عمل میکنم
اما سوال مشخص من اینه که ایا ما میتونیم مثلا فقط یکی از جداول اصلی رو که در ابتدا باهاش کار داریم در کریت دیتا ماژول باز کنیم و باز شدن بقیه رو به یک ترد بسپاریم تا جلوی لود اولیه برنامه رو نگیره؟
همونطور که عرض کردم برنامه در یک شبکه محلی مشکلی نداره ولی برای کار کردن از راه دور بر روی یک سرور دیگه در روی وب دنبال راه حل میگردم
ممنون از راهنمایی دوستان
در مورد ترد ها خیلی جستجو کردم موارد مفیدی هم پیدا کردم ولی در این مورد خاص چیزی ندیدم هنوز

یوسف زالی
جمعه 20 مرداد 1396, 06:01 صبح
نیازی به ترد نیست، خود اشیای دیتابیس خاصیت AsyncMode دارند. در این مورد مطالعه کنید.