1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-11-23 21:34:53 +02:00

Update to CEF 88.2.5

- Added TCEFWorkSchedulerQueueThread as an experimental way to handle the external message pump events for all platforms.
- Fixed backwards compatibility issues with Delphi 7.
This commit is contained in:
Salvador Diaz Fau
2021-02-11 19:52:23 +01:00
parent e7e7cb80c1
commit 002a21e6d6
126 changed files with 1063 additions and 395 deletions

View File

@@ -42,12 +42,19 @@ unit uCEFFMXWorkScheduler;
{$I cef.inc}
// Define this conditional to use TCEFWorkSchedulerQueueThread instead of using
// PostMessage, Application.QueueAsyncCall or TThread.Queue inside
// TCEFWorkScheduler.ScheduleMessagePumpWork
// TCEFWorkSchedulerQueueThread is just a new experimental way to handle the
// external message pump events for all platforms.
{.$DEFINE USEQUEUETHREAD}
interface
uses
System.Classes, System.Types,
FMX.Types, FMX.Controls,
uCEFConstants, uCEFWorkSchedulerThread;
uCEFConstants, {$IFDEF USEQUEUETHREAD}uCEFWorkSchedulerQueueThread,{$ENDIF} uCEFWorkSchedulerThread;
type
{$IFNDEF FPC}{$IFDEF DELPHI16_UP}[ComponentPlatformsAttribute(pidWin32 or pidWin64)]{$ENDIF}{$ENDIF}
@@ -55,6 +62,9 @@ type
TFMXWorkScheduler = class(TComponent)
protected
FThread : TCEFWorkSchedulerThread;
{$IFDEF USEQUEUETHREAD}
FQueueThread : TCEFWorkSchedulerQueueThread;
{$ENDIF}
FDepleteWorkCycles : cardinal;
FDepleteWorkDelay : cardinal;
FDefaultInterval : integer;
@@ -65,6 +75,12 @@ type
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
{$IFDEF USEQUEUETHREAD}
procedure CreateQueueThread;
procedure DestroyQueueThread;
procedure QueueThread_OnPulse(Sender : TObject; aDelay : integer);
{$ENDIF}
procedure DestroyThread;
procedure DepleteWork;
procedure NextPulse(aInterval : integer);
@@ -79,7 +95,6 @@ type
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure Thread_OnPulse(Sender : TObject);
public
@@ -138,6 +153,9 @@ end;
destructor TFMXWorkScheduler.Destroy;
begin
DestroyThread;
{$IFDEF USEQUEUETHREAD}
DestroyQueueThread;
{$ENDIF}
inherited Destroy;
end;
@@ -145,6 +163,9 @@ end;
procedure TFMXWorkScheduler.Initialize;
begin
FThread := nil;
{$IFDEF USEQUEUETHREAD}
FQueueThread := nil;
{$ENDIF}
FStopped := False;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
@@ -167,8 +188,45 @@ begin
FThread.DefaultInterval := FDefaultInterval;
FThread.OnPulse := Thread_OnPulse;
FThread.Start;
{$IFDEF USEQUEUETHREAD}
CreateQueueThread;
{$ENDIF}
end;
{$IFDEF USEQUEUETHREAD}
procedure TFMXWorkScheduler.CreateQueueThread;
begin
FQueueThread := TCEFWorkSchedulerQueueThread.Create;
FQueueThread.OnPulse := {$IFDEF FPC}@{$ENDIF}QueueThread_OnPulse;
{$IFDEF DELPHI14_UP}
FQueueThread.Start;
{$ELSE}
{$IFNDEF FPC}
FQueueThread.Resume;
{$ELSE}
FQueueThread.Start;
{$ENDIF}
{$ENDIF}
end;
procedure TFMXWorkScheduler.DestroyQueueThread;
begin
try
if (FQueueThread <> nil) then
begin
FQueueThread.Terminate;
FQueueThread.StopThread;
FQueueThread.WaitFor;
FreeAndNil(FQueueThread);
end;
except
on e : exception do
if CustomExceptionHandler('TFMXWorkScheduler.DestroyQueueThread', e) then raise;
end;
end;
{$ENDIF}
procedure TFMXWorkScheduler.DestroyThread;
begin
try
@@ -222,11 +280,20 @@ end;
procedure TFMXWorkScheduler.ScheduleMessagePumpWork(const delay_ms : int64);
begin
if not(FStopped) then
TThread.Queue(nil, procedure
begin
ScheduleWork(delay_ms);
end);
if FStopped then exit;
{$IFDEF USEQUEUETHREAD}
if (FQueueThread <> nil) and FQueueThread.Ready then
begin
FQueueThread.EnqueueValue(integer(delay_ms));
exit;
end;
{$ENDIF}
TThread.Queue(nil, procedure
begin
ScheduleWork(delay_ms);
end);
end;
procedure TFMXWorkScheduler.StopScheduler;
@@ -241,6 +308,11 @@ begin
if not(FStopped) then DoMessageLoopWork;
end;
procedure TFMXWorkScheduler.QueueThread_OnPulse(Sender : TObject; aDelay : integer);
begin
ScheduleWork(aDelay);
end;
procedure TFMXWorkScheduler.DoWork;
begin
DoMessageLoopWork;