نمایش نتایج 1 تا 30 از 30

نام تاپیک: مشکل در هنگام خروج از برنامه

  1. #1
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457

    مشکل در هنگام خروج از برنامه

    با سلام خدمت دوستان و اساتید گرامی سایت زیبای برنامه نویس
    من یک مشکل بحرانی در برنامه خودم دارم.
    مشکل این هست که هنگام خروج از برنامه برنامه بطور کامل خارج نمیشه و همچنان در حافظه باقی میمونه.در ضمن CPU Usage برای پروسس برنامه هم تقریبا مقدارش میشه 99 یا 100 درصد یعنی فاجعه.تا به حال با بسیاری از دوستانم این مشکل رو در میان گذاشتم اما به راه حل نرسیدم
    بعضی گفتند که باید برنامه رو دیباگ کنی اما با دیباگ کردن هیچ چیز به دست نمییاد حتی در صدد بر آمدیم تا پنجره ای را که این کد را تولید میکند ناسای کنیم اما نشد . یعنی چیزی که من به شخصه فکر میکنم این هست که این وضعیت هنگامی برای برنامه ایجاد میشه که تمام فرم ها و اشیاء از حافظه Free شدن و دیگه نمیشه به دیباگ کردن تکیه کرد.اما من با دیباگ کردن یه نکته رو متوجه شدم و اون اینه که در دیباگ هنگام برز مشکل در پنجره CPU از دیباگ برنامه روی خطی خاص Stop میشود عکس مربوطه رو هم قرار میدم.
    هر گونه نظری دارید لطفا عنایت کنید.
    با تشکر.
    عکس های ضمیمه عکس های ضمیمه  

  2. #2
    برای خروج کامل از برنامه به جای استفاده از دستور Close باید تو OnClose فرمت از دستور :

    Application.Terminate

  3. #3
    کاربر دائمی آواتار arshia_
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران-شهر فرزانگان( بروجرد )
    پست
    1,226
    ممکنه شما در برنامه ار چند فرم استفاده کردید
    اگر در فرم اصلی برنامه فرمان close;‌بنویسی و هیچ فرمی فعال نباشه برنامه بدرستی تموم می شه
    در غیر این صورت از فرمان Application.Terminate رو که آقای احسانی گفت استفاده کن براحتی اعمال می شه

  4. #4
    کاربر تازه وارد آواتار E_Zabihi
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    یک دو سه تا کوچه ز تو دورتر
    پست
    59
    البته اگر چنین Error می گیری بهتری ریسورهایی رو که استفاده کردی حتما release کنی با استفاده از application.terminate چند ثانیه طول می گشه تا همه ریسورس های سرگردان آزاد بشند ...

  5. #5
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    ممنون از جوابتون قبلا این مورد رو امتحان کرده بودم اما جواب نگرفتم
    اما با پست شما یه ایده به ذهنم رسید چون من برنامه رو در رویداد OnCloseQuery میبستم یعنی تحت یک شرایط برنامه بسته میشد و این شرایط رو با CanClose کنترل میکردم.با یک تغییرات در روند مشکلم به ظاهر حل شده.
    باز هم تشکر به ویژه از آقای کوشا و آقای ذوالقدری که قبلا برای این مورد وقت گذاشته بودند و راهنمایی کردند.

  6. #6
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    با استفاده از Application.Terminate در Event OnCloseQuery به نظر تا اینجا مشکلم حل شده.
    تشکر از همه دوستان

  7. #7
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    از دستور Halt(0) استفاده کن.
    جواب می ده.

  8. #8
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    نه هنوز این مشکل وجود داره

  9. #9
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    دستوری که در بالا گفتم برنامه را کامل می بندد.
    مگر اینکه به طور مثال بعد از بستن فرم از آن فرم چیزی را استفاد ه کنی.
    حالا اگر سورس برنامه کوچیکه اون را قرار بده تا ببینیم مشکل در کجاست یا حداقل پیغام خطا را بنویس و خط را هم نمایش بده.

  10. #10
    سلام

    آقا شما فرم اصلی برنامه رو close کن .

    عجیبه دستور halt; همیشه درست عمل میکنه

    دستور halt رو برای فرم اصلی هم امتحان کن.



    انشاالله که موفق بشی.

  11. #11
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    آقا بعضی مواقع اصلا خطایی تولید نمیشه فقط همون طور که قبلا گفتم CPU Usage مربوط به پروسس برنامه بعد از اقدام به خروج به شدت افزایش پیدا میکنه
    بعضی مواقع هم Access Violation میده

  12. #12
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط soroush_vs مشاهده تاپیک
    آقا بعضی مواقع اصلا خطایی تولید نمیشه فقط همون طور که قبلا گفتم CPU Usage مربوط به پروسس برنامه بعد از اقدام به خروج به شدت افزایش پیدا میکنه
    بعضی مواقع هم Access Violation میده
    آیا همیشه یک رویه به خصوص را تست می کنی که یک بار خطا می دهد و یک بار نمی دهد.
    شاید در بعضی از مواقع کار بخصوصی می کن کهAccess Violationمی دهد.
    خط های برنامه را درست چک کن .همانجور که می دانی زمانی پیغام Access Violation می دهد که چیزی وجود نداشته باشد(احتمالا کامپونت ، فرم و . . . را Free می کنی.)

  13. #13
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    همیشه یک رویه خاص را طی میکنم ممکنه چند بار برنامه بدون Error خارج شه چند بار Error بده چند بار هم بجای Error اصلا خارج نشه و CPU Usage پروسس برنامه بشه 80 تا 90 درصد.
    این مورد واقعا عجیبه اصلا با عقل جور در نمیاد.

  14. #14
    کاربر دائمی آواتار arshia_
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران-شهر فرزانگان( بروجرد )
    پست
    1,226
    من حدس می زنم شما یه پروسه دارید که بعضی وقتها درست عمل می کنه و مشکلی پیش نمی آد.اما در بقیه حالتها برنامه رو به یه حلقه بی انتها می بره و یا بن بست رخ می ده
    سعی کنید عناصر برنامه رو یکی یکی غیر فعال کنید تا متوجه بشین کدوم شی باعث ایجاد مشکل می شه
    اگر بانک اطلاعاتی هم داری سعی کن ارتباط اون رو هم تست کنی

  15. #15
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    ممکن شما یک رویه خاص را طی کنید ولی حتما از دید سیستم این رویه ها متفاوت است.
    شروع به غیر فعال کردن کدهای برنامه و کامپونتها بکن حتما Error را پیدا می کنی.

  16. #16
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    باشه این کار رو میکنم و نتیجه رو اعلام میکنم

  17. #17
    کد قبلی رو اینطوری کامل کن:

    var
    i: Integer;
    begin
    for i:= Screen.FormCount - 1 downto 0 do
    try
    if Screen.Forms[i] <> Application.MainForm then Screen.Forms[i].Free;
    except
    ShowMessage(IntToStr(i));
    raise;
    end;

    try
    Application.MainForm.Free;
    except
    ShowMessage('MainForm');
    raise;
    end;

    ShowMessage('Forms Freed OK');

    اینو بزار روی یک باتن روی یک از فرم هات و اجراش کن. نتیجه رو بگو

  18. #18
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    این کد خیلی جالبه

  19. #19
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    آقای کوشا باید با تعجب بگم که این پیغام Forms Freed OK ظاهر میشه و بعدش Access Violation میده
    در ضمن برنامه یا همون پروسس برنامه در حال اجرا میمونه و میشه توی Task Manager دیدش.

  20. #20
    تو برنامت DataModule داری؟

  21. #21
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    آره چطور مگه؟
    نکنه از اینه؟

  22. #22

    var
    i: Integer;
    begin
    for i:= Screen.DataModulesCount - 1 downto 0 do
    try
    Screen.DataModules[i].Free;
    except
    ShowMessage(IntToStr(i));
    raise;
    end;

  23. #23
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    بالاخره مشکل رو متوجه شدم.البته مشکل کاملا حل نشده.
    برنامه من حدود 80 تا 90 فرم داره و من در زمان ابتدای اجرا اونها رو بصورت اتوماتیک(پیش فرض) Create میکردم .اما الان اونها رو بصورت دینامیک Create میکنم.یعنی موقعی که لازم میشه فرمی رو Create میکنم.
    ولی با این وجود از وجود چنین پیغام خطایی در حالت قبل تعجب میکنم.

  24. #24
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    اما چرا مشکل کاملا حل نشده.هنگام خروج از برنامه(البته نه همیشه) CPU Usage برنامه تا حد ممکن بالا میره حتی 99 درصد و به هیچ وجه برنامه خودش بسته نمیشه.برای بستن برنامه حتما باید از طریق Task Manager اقدام کنم.
    دوستان کسی نظری داره؟

  25. #25
    توی برنامتون از Thread ای استفاده نکردید ؟

  26. #26
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    نه دوست من
    در ضمن خود دلفی هم گاهی موقع خروج دقیقا همین حالت براش پیش میاد(یعنی Terminate نمیشه و CPU Usage میشه 99 درصد) بقیه Application ها مشکلی ندارن اونهایی که با دلفی مرتبط هستن این مشکل رو دارن
    تا به حال این مشکل رو با خود دلفی داشتید؟

  27. #27
    ببخشید وسط حرف شما دوستان با تجربه پریدم ولی ببین احتمالاً در جایی از اجرای برنامه که فرم ها کم یا زیاد میشه خطایی رخ می دهد که به درستی مدیریت نشده به همین دلیل قبل از خروج این مشکل پیش می آید البته دلایل زیادی ممکنه وجود داشته باشه اما قطعاً مربوط به فرم هایی که به یا دیتا ماپول های شما است پس دنبال این گونه موارد باشید .
    در ضمن در رابطه با دلفی هم اگر پکیجهایی که باگ دارند نصب بشه این مشکل ایجاد می شود.
    راستی اگر یه دیباگر حرفه ای که تجربه زیادی داره استخدام کنی سریعتر به نتیجه می رسی.

  28. #28
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    نقل قول نوشته شده توسط Arman_1367 مشاهده تاپیک
    ببخشید وسط حرف شما دوستان با تجربه پریدم ولی ببین احتمالاً در جایی از اجرای برنامه که فرم ها کم یا زیاد میشه خطایی رخ می دهد که به درستی مدیریت نشده به همین دلیل قبل از خروج این مشکل پیش می آید البته دلایل زیادی ممکنه وجود داشته باشه اما قطعاً مربوط به فرم هایی که به یا دیتا ماپول های شما است پس دنبال این گونه موارد باشید .
    ممنون از راهنمایی اما من با این مورد مخالف هستم چون این مشکل رو زمانی که مدیریت حافظه ی فرم ها و ماژول ها با دلفی و بصورت اتوماتیک (خودکار)بود هم داشتم.
    نقل قول نوشته شده توسط Arman_1367 مشاهده تاپیک
    در ضمن در رابطه با دلفی هم اگر پکیجهایی که باگ دارند نصب بشه این مشکل ایجاد می شود.
    موافقم پکیج های زیادی نصب شده.فکر میکنم که مشکل خود برنامه هم باید از یکی از این پیج ها باشه.اما مسئله اینه که چرا فقط بعضی اوقات پیش میاد(حتی با طی یک روند یکسان در برنامه تنها بعضی مواقع این حالت پیش میاد)
    نقل قول نوشته شده توسط Arman_1367 مشاهده تاپیک
    راستی اگر یه دیباگر حرفه ای که تجربه زیادی داره استخدام کنی سریعتر به نتیجه می رسی.
    به نظرت با چه ابزار دیباگ کنم؟ با دیباگر دلفی یا دیباگر خاصی برای این مورد مد نظر شما هست؟

  29. #29
    من نگفتم مدیریت حافظه شما غلطه.
    ببین گاهی اوقات بعضی از جاها در برنامه های خیلی بزرگ مدیریت حافظه دلفی ضعیف عمل می کنه برای همین باید تمام فرم ها و ... را به صورت دستی ایجاد کنی و بعد دوباره آزاد کنی البته می دونم کار سختیه برای همین گفتم از یک نفر که خیلی کار دیباگ کرده و دیگه اند برنامه نویسیه استفاده کن .

    راستی چک کن ببین قبل از خروج از یکی از فرم ها یا دیتاماژولها کدی ننوشته ای که بخواهد مثلاً عملیاتی روی یک کمپاننت انجام بده.ممکنه مشکل از اینهم باشه البته فکر کنم با سوابق شما بعید باشه اما گفتم یک وقت از قلم نیفته.

  30. #30
    کاربر دائمی آواتار soroush_vs
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    شیراز
    سن
    38
    پست
    457
    نتیجه گیری جدید من
    وقتی که این مشکل پیش میاد.هر بار که برنامه رو اجرا و Terminate میکنم این مشکل تکرار میشه تا اینکه سیستم رو Restart کنم.و دیگه این مشکل رو ندارم.فکر میکنم ارتباط چندانی با خود نرم افزار نداشته باشه.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •