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

نام تاپیک: ساختن تابعی که در آن از تردها استفاده شود

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان - ایران
    پست
    199

    Question ساختن تابعی که در آن از تردها استفاده شود

    سلام
    می خواهم یک فانکشن بنویسم که در آن اطلاعاتی از یک وب سرور دریافت میشود. این وب سرویس خیلی سریع نیست و ممکن است باعث فریز شدن کل برنامه شود.
    می خواستم این فانکشن را با ترد بنویسم اما معمولا در برنامه نویسی ترد در داخل فانکشن ترد را می سازیم ولی پاسخ را با OnMessage دریافت می کنیم در نتیجه نمی توان پاسخ را به عنوان result آن تابع برگرداند!
    آیا راه حلی برای این مشکل وجود دارد؟

  2. #2

    نقل قول: ساختن تابعی که در آن از تردها استفاده شود

    سلام.
    باید یک متد کال بک صدا زده بشه.به همراه پارامترهاتون یک متد هم پاس بدید و ترد در هنگام تمام شدن کارش اون رو صدا می زنه.
    خروجی ای از تابع دریافت نمی کنید، چون اگر بنا باشه منتظر خروجی بمونید باز فریز می شید.
    تابع رو هم به پروسیجر تغییر بدید.

    چیزی مثل این:

    type:
    .
    .
    CallBackProc = procedure (Params: TParams);
    .
    .
    thread:
    .
    .
    if Assigned(CallBack) then
    CallBack(Params);
    .
    .
    program:
    .
    .
    procedure CallBack(Params: TParams);
    .
    .
    GetWebServiceResult(CallBack);
    .
    .


    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  3. #3

    نقل قول: ساختن تابعی که در آن از تردها استفاده شود

    سلام. همانطور که آقای زالی فرمودند روش طراحی کارها به روش مالتی ترد با حالت عادی تفاوت داره. اگر جایی نیاز بود تا توقف داشته باشید و منتظر نتیجه بمانید میتوانید از Future هم استفاده کنید که کلاسهای مربوطه در نسخه های جدید دلفی یعنی از نسخه XE7 به بعد وجود دارند. به عنوان یک مثال میتوانید از کدی که نوشته ام بهره لازم را ببرید:
    uses  System.Threading;


    var
    FutureInt: IFuture<Integer>;


    procedure TForm3.Button1Click(Sender: TObject);
    begin
    TTask.Run(
    procedure
    var
    resultInt : integer;
    begin
    FutureInt := TTask.Future<integer>(
    function: Integer
    begin
    { some calculation that takes time}
    Sleep(3000);
    Result := Random(1000);
    end);


    resultInt := FutureInt.Value;
    TThread.Synchronize(nil,
    procedure
    begin
    Caption := resultInt.ToString;
    end);
    end);
    end;




    موفق باشید ...

تاپیک های مشابه

  1. استفاده ازکلیدهای تابعی
    نوشته شده توسط amirkazem در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 9
    آخرین پست: دوشنبه 17 خرداد 1395, 21:07 عصر
  2. پاسخ: 2
    آخرین پست: چهارشنبه 10 تیر 1394, 11:10 صبح
  3. سوال: استفاده از کلیدهای تابعی در پنجره
    نوشته شده توسط dharmaa در بخش WPF
    پاسخ: 4
    آخرین پست: جمعه 01 اسفند 1393, 21:02 عصر
  4. سوال: چگونگی بستن فرم اصلی در صورتیکه فرم فرعی بسته شود
    نوشته شده توسط water_lily_2012 در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 12 آذر 1389, 17:49 عصر
  5. توابعی که با @ شروع میشن چه جور توابعی هستند؟
    نوشته شده توسط resident در بخش PHP
    پاسخ: 6
    آخرین پست: یک شنبه 30 دی 1386, 00:28 صبح

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

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