Но соображения по поводу элемента Synchronize появились.
Напомню, что мне не нравится:
Galkov писал(а):
... против "индуизма" кодинга (Вы используете AM_SYNC_METHOD, nesco - WM_DEFERREDEVENT, а Кладов - CM_EXECPROC)Отсюда вопрос - а если так:
unit hiSynchronize;
interface
uses Kol,Share,Debug;
type
ThiSynchronize = class(TDebug)
private
TM:TThreadMethod; // поле FMethod фиктивного TThread
DT:Pdata;
procedure SyncMethod;
public
_data_Data: THI_Event;
_event_onSync: THI_Event;
procedure _work_doSynchronize(var _Data:TData; Index:Word);
end;
implementation
type
{$ifndef F_P}
TThreadEx = object(TThread) end;
PThreadEx = ^TThreadEx;
{$else}
TThreadEx = class(TThread) end;
PThreadEx = TThreadEx;
{$endif}
procedure ThiSynchronize._work_doSynchronize;
begin
DT := @_Data;
PThread(integer(@@TM)-integer(@@PThreadEx(nil).FMethod)).Synchronize(SyncMethod);
end;
procedure ThiSynchronize.SyncMethod;
var D:TData;
begin
D := ReadData(DT^, _data_Data);
_hi_OnEvent(_event_onSync, D);
end;
end.