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

نام تاپیک: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

  1. #1

    مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

    با سلام

    در قسمتی از برنامه باید Source تعدادی صفحه وب رو پشت سر هم و در یک بازه زمانی مشخص دریافت کنم . برای اینکار از کنترل TIdHttp که توسط یک تایمر فرخوانی میشه استفاده می کنم . هموطنور که در تاپیک های قبلی مطرح شد ، در زمان فراخوانی تابع Get کنترل TIdHttp فرم غیرقابل دسترس میشه و در اصطلاح هنگ می کنه . برای جلوگیری از رخ دادن این حالت جناب کشاورز کنترل IdAntiFreeze رو پیشنهاد کردند . در واقع استفاده از IdAntiFreeze انتخاب مناسب و ساده ای هست اما دقیقاً نمی دونم وقتی IdAntiFreeze در یک Timer فعال میشه چه اتفاقاتی رخ میده .

    به طور خلاصه مشکل اینجاست که وقتی IdAntiFreeze در یک کنترل Timer فعال میشه (Active:=True) در خطوط بعدی برنامه امکان غیر فعال سازی تایمر وجود نداره (Timer.Enabled:=False) .

    در واقع من با اینکار میخوام صفحات یک سایت رو به صورت مدیریت شده پیمایش کنم .

        Doevents.Active := true;
    PageSource := frmget.W2.Get(MainAddr);
    Doevents.Active := false;
    Timer1.Enabled := false;

        Doevents.Active := true;
    PageSource := frmget.W2.Get(MainAddr);
    Timer1.Enabled := false;
    Doevents.Active := false;


    در هر دو حالت نتیجه ای حاصل نشد !

    ممنون میشم راهنمایی بفرمایید

  2. #2

    نقل قول: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

    ببینید، از IdAntiFreeze انتظار کار فوق العاده ایی نداشته باشید. این کامپوننت فقط Application.ProcessMessages را فراخوانی میکنه. Timer هم برای کار خودش از Message استفاده میکنه. اگر فشار کار زیاد بشه، یا پردازش بعضی از پیام ها بیش از حد زمان ببره، ممکنه شما اون چیزی که مد نظرتون هست رو بهش نرسید.

    در کارهای جدی تر باید برید سراغ استفاده از Thread.

    در واقع من با اینکار میخوام صفحات یک سایت رو به صورت مدیریت شده پیمایش کنم .
    یعنی دقیقا چی کار می کنید؟


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3

    نقل قول: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    یعنی دقیقا چی کار می کنید؟
    آدرس زیر رو در نظر بگیرید :

    http://www.site.com/show.php?id=1

    برنامه قراره سورس صفحات 1 تا 10 رو توسط تابع Get دریافت کنه . با استفاده از یک کنترل Timer و یک شمارنده قرار بود اینکار انجام بشه . اما به دلیل وقفه ای که هنگام فراخوانی get در فرم وجود میومد ، در کنار تایمر از IdAntiFreeze هم استفاده کردم که استفاده هم زمان از IdAntiFreeze و Timer هم مشکلات خودش رو داره .
    از Thread استفاده کردم . بدون استفاده از متد Synchronize بازهم در فرم وقفه ایجاد شد .

    البته یک راه دیگه هم الآن به ذهنم خورد . استفاده از رویداد OnWorkEnd کنترل TidHttp . یعنی زمانی که سورس صفحه دریافت شد به شمارنده یکی اضافه بشه و سورس صفحه بعدی درخواست بشه . شاید اینجا دیگه استفاده از IdAntiFreeze عملی باشه .

  4. #4

    نقل قول: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

    مشکل برطرف شد . به کمک یه procedure و کنترل IdAntiFreeze میشه تایمری پیاده سازی کرد که Interval اون رو مدت زمان لازم برای تکمیل عملیات تابع Get مربوط به کنترل TidHttp تعیین میکنه .

  5. #5
    کاربر تازه وارد آواتار rainstorm
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    هر کجا باشم فرقی نمی کنه مهم اینکه تو گل زندگمی
    پست
    52

    نقل قول: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

    نقل قول نوشته شده توسط مهران رسا مشاهده تاپیک
    مشکل برطرف شد . به کمک یه procedure و کنترل IdAntiFreeze میشه تایمری پیاده سازی کرد که Interval اون رو مدت زمان لازم برای تکمیل عملیات تابع Get مربوط به کنترل TidHttp تعیین میکنه .
    سلام میشه دقیق و با مثال توضیح بدین چیکار کردین؟

  6. #6

    نقل قول: مشکل در استفاده از کنترل IdAntiFreeze در کنار Timer

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

برچسب های این تاپیک

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

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