Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2017-09-21 14:17:52 ЛС | профиль | цитата
Уважаемые коллеги... Не закончил я пока своих издевательств с COM-портом (через FT232RL). Хотя пока все и работает...

Но соображения по поводу элемента 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.
Мне думается, что и DeferredEvent можно по этому принципу делать...
карма: 9

0
Редактировалось 1 раз(а), последний 2017-09-21 14:20:59