[my sample] When use Thread.Queue or Thread.ForceQueue to "queue" your commands, mainly in mobile projects - Android is my case!
[SHOWTOGROUPS=4,20]
Here, im using my main thread for tests!
hug
[/SHOWTOGROUPS]

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.
hug
[/SHOWTOGROUPS]
Последнее редактирование: