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