Defer execution of TDataSet Post() and ExecSQL() to background thread.

This commit is contained in:
rosenfield
2007-06-30 00:25:11 +00:00
parent fca0840aa3
commit c79febe7b4
9 changed files with 144 additions and 60 deletions

View File

@ -123,7 +123,7 @@
<Directories Name="UnitOutputDir">..\..\build</Directories>
<Directories Name="PackageDLLOutputDir"></Directories>
<Directories Name="PackageDCPOutputDir"></Directories>
<Directories Name="SearchPath"></Directories>
<Directories Name="SearchPath">..\..\..\components\zeosdbo\build</Directories>
<Directories Name="Packages"></Directories>
<Directories Name="Conditionals"></Directories>
<Directories Name="DebugSourceDirs"></Directories>

View File

@ -26,7 +26,13 @@ package HeidiComponents;
{$IMPLICITBUILD OFF}
requires
vcl;
vcl,
dbrtl,
ZParseSql,
ZCore,
ZDbc,
ZPlain,
ZComponent;
contains
heidicomp in '..\..\source\heidicomp.pas';

View File

@ -4,7 +4,8 @@ interface
uses
Windows, Classes, Controls, Forms, Dialogs, SysUtils,
ComCtrls, CommCtrl, StdCtrls, ExtCtrls, Graphics;
ComCtrls, CommCtrl, StdCtrls, ExtCtrls, Graphics,
ZDataset;
{$I ../../../source/const.inc}
@ -79,12 +80,60 @@ type
end;
type
TDeferDataSet = class;
TAsyncPostRunner = procedure(ds: TDeferDataSet) of object;
TDeferDataSet = class(TZQuery)
private
callback: TAsyncPostRunner;
kind: Integer;
protected
procedure InternalPost; override;
public
constructor Create(AOwner: TComponent; PostCallback: TAsyncPostRunner); reintroduce;
procedure ExecSQL; override;
procedure DoAsync;
procedure DoAsyncExecSql;
end;
procedure Register;
implementation
procedure TDeferDataSet.InternalPost;
begin
kind := 1;
if @callback = nil then DoAsync
else callback(self);
end;
procedure TDeferDataSet.ExecSql;
begin
kind := 2;
if @callback = nil then DoAsync
else callback(self);
end;
constructor TDeferDataSet.Create(AOwner: TComponent; PostCallback: TAsyncPostRunner);
begin
callback := PostCallback;
inherited Create(AOwner);
end;
procedure TDeferDataSet.DoAsync;
begin
case kind of
1: inherited InternalPost;
2: inherited ExecSQL;
end;
end;
procedure TDeferDataSet.DoAsyncExecSql;
begin
inherited ExecSql;
end;
procedure Register;
begin