PDA

View Full Version : تفاوت دستور Release و Free?



SYNDROME
پنج شنبه 15 بهمن 1388, 07:44 صبح
با سلام
تفاوت این دو دستور چیست؟
با تشکر

SYNDROME
شنبه 17 بهمن 1388, 18:18 عصر
با سلام
آیا کسی از دوستان می تواند من را راهنمایی کند؟
موفق باشید

merced
دوشنبه 19 بهمن 1388, 22:35 عصر
Help رو خوندی ؟





Description

Use Release to destroy the form and free its associated memory.


Release does not destroy the form until all event handlers of the form and event handlers of components on the form have finished executing. Release also guarantees that all messages in the form's event queue are processed before the form is released. Any event handlers for the form or its children should use Release instead of Free (Delphi) or delete (C++‎‎). Failing to do so can cause a memory access error.


Note: Release returns immediately to the caller. It does not wait for the form to be freed before returning.



مي دونيد كه فقط فرم هست كه Release داره (من فقط فرم رو ديدم.)

SYNDROME
سه شنبه 20 بهمن 1388, 17:46 عصر
با کمال تشکر
من خودم و تا حدودی فهمیدم
ولی اگر امکان دارد شما هم یک توضیح بدهید.
با تشکر

merced
سه شنبه 20 بهمن 1388, 23:20 عصر
والا قدرت بيان ندارم. چون خودم كامل متوجه نشدم.

ولي Release امن تره . چون منتظر مي مونه تمام Handle‌ها free‌ شند و تمام Message ها جواب بگيرند و كامل شند (اصطلاح امن جالب نمياد .. مطمئن تر بهتر بايد باشه)
ولي Free تلقي ميزنه فرم رو آزاد مي كنه . با هرچي كه بهش بسته هست .

alinikaein
چهارشنبه 21 بهمن 1388, 08:33 صبح
والا قدرت بیان ندارم. چون خودم کامل متوجه نشدم.

ولی Release امن تره . چون منتظر می مونه تمام Handle‌ها free‌ شند و تمام Message ها جواب بگیرند و کامل شند (اصطلاح امن جالب نمیاد .. مطمئن تر بهتر باید باشه)
ولی Free تلقی میزنه فرم رو آزاد می کنه . با هرچی که بهش بسته هست .

فكر نكنم ربطي به امن‌تر بودن، داشته باشه.

ولي با توجه به چيزي كه خوندم و شما نوشتين، فكر كنم Release براي برنامه‌هاي بانك اطلاعاتي مناسب‌تر باشه.
ولي حالا سؤال اينجاست كه Terminate پس چي؟

vcldeveloper
چهارشنبه 21 بهمن 1388, 12:46 عصر
Release فقط برای TForm وجود داره؛ و علت وجودش هم این هست که اگر برنامه نویس خواست در یکی از Eventهای آن فرم، همان فرم را آزاد کند، به مشکل برنخورد.
یک Event توسط یکی از متدهای یک شی فراخوانی می شود، یعنی زمانی که کد آن Event در حال اجرا هست، شما عملا در داخل یکی از متدهای آن شی قرار دارید. مثلا اگر متد مربوطه به این شکل باشد:

procedure TMyClass.DoMyEvent;
begin
if Assigned(FMyEvent) then
FMyEvent(Self);
end;

در این صورت، در زمان اجرای FMyEvent شما همچنان در داخل متد TMyClass.DoMyEvent هستید.
حالا اگر در این کد شما TMyClass را آزاد کنید، عملا این متد را هم از بین می برید. به زبان ساده تر، این کار مثل آن است که شما شاخه ایی را که روی آن نشسته اید، اره کنید! معلوم هست که با این کار خودتان زمین می خورید.

از اونجایی که احتمال انجام همچین کاری برای فرم ها زیاد هست، کلاس TForm یک متد Release برای این کار فراهم کرده. این متد قبل از آزاد کردن فرم مطمئن می شود که هیچ Event-handler ایی در فرم در حال اجرا نباشد. اگر Event-handlerایی در حال اجرا بود، Release کنترل اجرا را بلافاصله به شما بر می گرداند، ولی در پشت صحنه فرم شما تا زمانی که اجرای آن Event-handler پایان نیافته، همچنان وجود دارد، و زمانی که اجرای آن کد پایان یافت، به طور خودکار آزاد می شود.