ورود

View Full Version : آموزش: ایجاد صف برای انجام دستورات



seyed_farid
دوشنبه 27 دی 1400, 16:38 عصر
با سلام

من یک 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 برنامه را بالا نبرم چکونه امکانپذیر هست؟

seyed_farid
دوشنبه 27 دی 1400, 17:14 عصر
با سلام مجدد

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


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;