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

نام تاپیک: مشکل با تعریف تردها در یک dll

  1. #1

    مشکل با تعریف تردها در یک dll

    سلام

    در یک برنامه که از کلاس Tthread در آن استفاده می‌شود اگر به صورت فایل exe معمولی اجرا شود هیچ مشکلی وجود ندارد و دقیقا تابع Synchronize جهت به روز آوری رابط کاربر در روال Execute آن کار می کند.
    اما اگر این کد درون یک dll قرار گیرد دیگر تابع Synchronize کار نمی کند! چرا؟
    اگر تابع Synchronize را حذف کنم dll به خوبی کار می‌کند ولی بسیار ناپایدار خواهد بود و سبب هنگ برنامه پس از مدتی می شود. (البته بورلند هم توصیه کرده که حتما به روز آوری رابط کاربر بدلیل thread safe نبودن کامپوننت‌های VCL باید به همراه Synchronize باشد. اما درون یک dll به چه صورت است؟ و چرا کار نمی کند؟)

    با تشکر

  2. #2
    یه نمونه از کدها تون را هم اینجا بزارید تا بشه تشخیص داد مشکل از کجا ست.
    (البته بورلند هم توصیه کرده که حتما به روز آوری رابط کاربر بدلیل thread safe نبودن کامپوننت‌های VCL باید به همراه Synchronize باشد. اما درون یک dll به چه صورت است؟ و چرا کار نمی کند؟)
    حتما ایی وجود نداره، بلکه تابع Synchronize ساده ترین راهی هست که می تونید رابط کاربر را بروز کنید. راههای دیگه ایی هم برای همزمان سازی Thread ها وجود دارند که از Synchronize بهینه تر ولی پیچیده تر هستند.

  3. #3
    سلام
    مجبور به استفاده از Synchronize هستم چون امکان آپدیت user interface از ترد دیگری بجز ترد اصلی برنامه وجود ندارد و برنامه هنگ خواهد کرد. فراخوانی این تابع سبب می شود که کار آپدیت در ترد اصلی برنامه صورت گیرد.

  4. #4
    ببینید، برای آپدیت کردن ui از درون ترد اصلی، نه تنها همونطور که آقای کشاورز گفتند می توانید از روشهایی غیر از synchronize برای همزمان سازی تردها استفاده کنید، بلکه راههای ساده تری هم وجود دارند. (راههای غیر از همزمان سازی)
    مثلا می تونید یک message به یکی از فرمهای برنامه تان ارسال کنید. سپس ترد اصلی هنگام پردازش آن پیغام، ui را بروز کند.
    پیشنهاد می کنم در مورد ترد ها بیشتر مطالعه کنید. (البته تا همینجا هم اطلاعات مفیدی در حیطه دلفی دارید، اما منظورم استفاده از منابعی مثل msdn است که وابسته به دلفی نباشند)

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

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