مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
سلام و عرض ادب
من دریک برنامه بانک اطلاعاتی تحت شبکه با دو آی پی استاتیک در دو نقطه مختلف شهر به دلیل دیر باز شدن جداول اقدام به ایجاد 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;
نقل قول: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
اصلا همینکه کار میکنه باید خدارو شکر کنید.
قوانین ترد اصلا در کدتون لحاظ نشده.
شما در ترد جانبی حق دسترسی به ابجکتهای روی فرم رو ندارید. باید بصورت رانتایم تولیدشون کنید در بدنه ترد و سپس در همانجا ازادشون کنید.
نقل قول: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
نا امیدم کردی بزرگوار
میشه بیشتر توضیح بدید
من هدفم اینه که باز کردن جداول زمان زیادی رو میبره داخل ترد انجام بشه و جلوی کار کردن با فرمها رو نگیره
ایا راهکار بهتری هم پیشنهاد میکنید
سرور در یک طرف شهر و کلاینت طرف دیگر هست
نقل قول:
نوشته شده توسط
Mask
اصلا همینکه کار میکنه باید خدارو شکر کنید.
قوانین ترد اصلا در کدتون لحاظ نشده.
شما در ترد جانبی حق دسترسی به ابجکتهای روی فرم رو ندارید. باید بصورت رانتایم تولیدشون کنید در بدنه ترد و سپس در همانجا ازادشون کنید.
نقل قول: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
در مورد ترد ساختان چند ده بار سوال پرسیده شده و نمونه هایی قرارداده شده - سرچ کنید .
معماری که دارید سیستون رو بر پایش توسعه میدید کلا مشکل داره - مثلا هم که ترد رو اضافه کردید جداول سنگین شدن کاربر باید مثلا ۵ دقیقه با یه فرم خالی بازی کنه تا دیتا توش لود بشه ؟!
بحث پیجینگ رو به query هاتون اضافه کنید و رکوردها رو مثلا ۵۰ تا ۵۰ تا درخواست بدید و لود کنید .
نقل قول: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
ممنونم از دوستانی که جواب دادن و به تک تک توصیه های کاربردی شما عمل میکنم
اما سوال مشخص من اینه که ایا ما میتونیم مثلا فقط یکی از جداول اصلی رو که در ابتدا باهاش کار داریم در کریت دیتا ماژول باز کنیم و باز شدن بقیه رو به یک ترد بسپاریم تا جلوی لود اولیه برنامه رو نگیره؟
همونطور که عرض کردم برنامه در یک شبکه محلی مشکلی نداره ولی برای کار کردن از راه دور بر روی یک سرور دیگه در روی وب دنبال راه حل میگردم
ممنون از راهنمایی دوستان
در مورد ترد ها خیلی جستجو کردم موارد مفیدی هم پیدا کردم ولی در این مورد خاص چیزی ندیدم هنوز
نقل قول: مشکل در آزاد شدن Thread دوستان باتجربه کمک لطفا
نیازی به ترد نیست، خود اشیای دیتابیس خاصیت AsyncMode دارند. در این مورد مطالعه کنید.