|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2020/5/7 1:08:26 |
标题: |
[my sample] When use Thread.Queue or Thread.ForceQueue to |
浏览:939 |
|
加入我的收藏 |
楼主: |
[my sample] When use Thread.Queue or Thread.ForceQueue to "queue" your commands, mainly in mobile projects - Android is my case!
Here, im using my main thread for tests!
unit uVCL_FormMain;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type TfrmFormMain = class(TForm) btnThread_Queue: TButton; btnThread_ForceQueue: TButton; Memo1: TMemo; procedure btnThread_QueueClick(Sender: TObject); procedure btnThread_ForceQueueClick(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure prcMyLog(lText: string = ''); public { Public declarations } end;
var frmFormMain: TfrmFormMain;
implementation
{$R *.dfm}
procedure TfrmFormMain.prcMyLog(lText: string = ''); begin if not(lText.IsEmpty) then Memo1.Lines.Add(lText); // Memo1.Lines.Add(format('%s - running my Memo Log code <-----', [TimeToStr(now)])); end;
procedure TfrmFormMain.btnThread_QueueClick(Sender: TObject); begin // Memo1.Clear; // // forcing a "Queue" be used // // for test it, mark 2 break-point in this code: // TThread.ForceQueue(nil, procedure begin // command 0 btnThread_Queue.Caption := 'btnThread_Queue ' + TimeToStr(now); { break point - later here! } // prcMyLog(format('%s - Queue - command 1', [TimeToStr(now)])); // prcMyLog(format('%s - Queue - command 2', [TimeToStr(now)])); // // Button1.Repaint; end); // prcMyLog(format('%s - Queue - command 3', [TimeToStr(now)])); // prcMyLog(format('%s - Queue - command 4', [TimeToStr(now)])); // prcMyLog(format('%s - Queue - command 5 = %s', [TimeToStr(now), StringOfChar('-', 40)])); end; { break point - first occurrs here }
procedure TfrmFormMain.btnThread_ForceQueueClick(Sender: TObject); begin // Memo1.Clear; // // in a main-thread, the call occurs imediatelly! - non-synchronization! // // for test it, mark 2 break-point in this code: // TThread.Queue(nil, procedure begin // command 0 btnThread_ForceQueue.Caption := 'btnThread_ForceQueue ' + TimeToStr(now); { break point - first occurrs here! } // prcMyLog(format('%s - ForceQueue - command 1', [TimeToStr(now)])); // prcMyLog(format('%s - ForceQueue - command 2', [TimeToStr(now)])); // // Button1.Repaint; end); // prcMyLog(format('%s - ForceQueue - command 3', [TimeToStr(now)])); // prcMyLog(format('%s - ForceQueue - command 4', [TimeToStr(now)]));
prcMyLog(format('%s - ForceQueue - command 5 = %s', [TimeToStr(now), StringOfChar('-', 40)])); end; { break point - later here! }
procedure TfrmFormMain.FormCreate(Sender: TObject); begin self.Position := TPosition.poScreenCenter; Memo1.Clear; end;
end.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3 |
|