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

نام تاپیک: ایجاد صف برای انجام دستورات

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

    ایجاد صف برای انجام دستورات

    با سلام

    من یک mwIdTCPThreadClient1 دارم که به سرور وصل می شود و با توجه به دستوراتی که سرور ارسال میکند باید فرمان را اجرا کند.
    فرمانها را در Function TMain.ProccessMessage(s : String): Boolean; مورد بررسی قرار میدهم.
    آیا با دستورات زیر صف بدرستی اجرا میشود یا باید تغییراتی بدهم؟


    procedure TMain.ProcessMessageQueueIn;
    var s : string;
    begin
    while MessageQueueIn.Count > 0 do
    try
    s := MessageQueueIn[0];
    MessageQueueIn.Delete(0);
    ProccessMessage(s);

    Waitms(10);
    Application.ProcessMessages;
    NotifyChangedIn;
    except
    MessageQueueIn.Clear;
    end;
    OnJobIn := False;
    end;

    procedure TMain.NotifyChangedIn;
    begin
    if not OnJobIn then
    begin
    OnJobIn := True;
    ProcessMessageQueueIn;
    end;
    end;

    procedure TMain.AddToStackIn(Token:string);
    begin
    MessageQueueIn.Add(Token);
    NotifyChangedIn;
    end;


    1- اگر حین اجرای دستور قبلی ، دستور جدیدی بیاید باید منتظر بماند تا دستور قبلی به مرحله نهایی برسد و بعد دستور جدید اجرا شود.
    آیا این کدها میتواند تامین کننده منظور من باشد یا نه؟

    2- آیا اگر این دستورات را بخواهم بصورت Thread اجرا کنم که CPU برنامه را بالا نبرم چکونه امکانپذیر هست؟

  2. #2
    کاربر دائمی آواتار seyed_farid
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    469

    نقل قول: ایجاد صف برای انجام دستورات

    با سلام مجدد

    این هم یک روش دیگه هست.
    در مورد این چه نظری دارید؟

    procedure TMain.ThreadWorkerQueueInExecute;
    var s : string;
    begin
    while not Application.Terminated do
    begin
    while MessageQueueIn.Count > 0 do
    try
    s := MessageQueueIn[0];
    MessageQueueIn.Delete(0);
    ProccessMessage(s);

    sleep(10);
    // Application.ProcessMessages;
    except
    MessageQueueIn.Clear;
    end;

    Sleep(100);
    end;
    end;

    procedure TMain.AddToStackIn(Token:string);
    begin
    MessageQueueIn.Add(Token);
    end;

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

  1. نشناختن دستور toast.maketext در آندروید استودیو
    نوشته شده توسط araman59 در بخش Android Studio
    پاسخ: 2
    آخرین پست: یک شنبه 28 دی 1393, 19:37 عصر
  2. پاسخ: 4
    آخرین پست: سه شنبه 23 مهر 1392, 05:57 صبح
  3. پاسخ: 3
    آخرین پست: چهارشنبه 03 فروردین 1390, 23:51 عصر

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

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

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