1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| { TFilterThread }
constructor TFilterThread.Create(aWnd :hWnd; aAPAT_PID: THandle);
begin
inherited Create;
Wnd := aWnd;
APAT_PID := aAPAT_PID;
FreeOnTerminate := TRUE;
end;
procedure TFilterThread.Execute;
var
Msg :TMsg;
//- Callback ------------------------------------------------------------------------------------
procedure MDAPI_CallbackPMT(MyFilter: integer; DatenLaenge: integer; Daten: PByteArray); cdecl;
var
i: integer;
begin
APMTtemp := '';
for i := 0 to 183 do
begin
APMT := APMT + inttohex(Daten[i], 2);
if (i > 8) and (copy(APMT, length(APMT) - 8, 8) = 'FFFFFFFF') then
begin
//StopFiltering - Synchro
PostThreadMessage(MyFilter, WM_QUIT, 0, 0); //En supposant que MyFilter corresponde à StartFilter.Filter_ID (à contrôler)
APMTtemp := copy(APMT, 1, length(APMT) - 10);
APMT := APMTtemp;
GUI.PushMSG_Info('PMT' + APMT);
PMTlist;
break;
end;
end;
end;
//-----------------------------------------------------------------------------------------------
begin
//StartFilteringePMT
StartFilter.DLL_ID := _MultiDec_DLL_ID;
StartFilter.Filter_ID := ThreadID; // Utilisé par PostThreadMessage dans callback
StartFilter.Name := 'PMT-Filter';
StartFilter.Pid := APAT_PID;
StartFilter.Irq_Call_Adresse := @MDAPI_CallbackPMT;
SendMessage(Wnd, WM_USER, MDAPI_START_FILTER, (LongWord(@StartFilter)));
PAT_filter_running := TRUE;
//Attente de WM_QUIT - Synchro
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
//StopFiltering
SendMessage(Wnd, WM_USER, MDAPI_STOP_FILTER, StartFilter.Running_ID);
m_filter_running := FALSE;
end; |
Partager