Báo cáo tests KBM MW 5.09 (1) - Scheduler

Trong phiên bản mới nhất, KBM MW đã thêm một số chức năng mới và cải thiện nhiều chức năng hiện có, cùng với việc sửa lỗi. Trong số những改成 quan trọng nhất, KBM MW đã thêm các chức năng mới trong接口 IkbmMWScheduledEvent, bao gồm thêm phương thức SyncQueued, AfterEnd, SynchronizedAfterEnd, và thêm thuộc tính IsSynchronized. Các phương thức này giúp người dùng quản lý tốt hơn các задач thay đổi状态 và xử lý các lỗi tiềm ẩn. Trước đây, khi người dùng gọi function Scheduler.Run, họ cần phải xử lý các phương thức AfterRun và SynchronizedAfterRun. Trong phiên bản mới, các phương thức này đã được sửa đổi để chỉ được gọi một lần sau khi tất cả các задач đã được thực hiện. Điều này sẽ làm giảm số lần gọi các phương thức này, giúp code dễ đọc và hiệu quả hơn. Calculator

Bài toán

Tính tổng của dãy số từ 1 đến 10000

Giải pháp

                procedure TForm6.Button1Click(Sender: TObject);
                begin
                    Scheduler.Run(
                        procedure
                          var
                             I: Integer;
                          begin
                               for I := 1 to 10000 do
                               begin
                                    text1.Text := i.ToString;
                               end;
                          end
                    ).SyncQueued // thay .Synchronized
                    .Activate;
                end;
            

Lời giải

Trong code trên, phương thức SyncQueued được sử dụng để thực hiện các phương thức task trong少吃 thread. Nếu thay SyncQueued bằng Synchronized, các phương thức task sẽ được thực hiện trong thread chính, gây ra将进一步 performance loss.

Chính xác hơn

                    .SyncQueued
                    

Phương thức SyncQueued sử dụng TThread.Queue để chạy các phương thức task. Trong khi đó, phương thức Synchronized sử dụng TThread.Synchronize để chạy các phương thức task trong thread chính.

Ví dụ

                        Scheduler.Run(
                            procedure
                              var
                                 I: Integer;
                            begin
                                 for I := 1 to 10000 do
                                 begin
                                      text1.Text := i.ToString;
                                 end;
                            end
                    ).SyncQueued
                    .Activate;
                    

Thẻ: KBM MW Scheduler TkbmMW KbM API SmartBinding

Đăng vào ngày 10 tháng 6 lúc 05:30