[elektro] idoosztasi strategia

Info info at kiralyelektronika.hu
Fri Jul 29 20:16:11 CEST 2011


Szóval thread és waitformultipleobject párost javaslom.
Teljesség igénye nélkül:
(a baj az vele, hogy kilépéshez is kell esemény vagy pedig megadsz
mondjuk 1000ms időhatárt és ciklikusan meg fogja lesni a Terminated
értékét)

TEseményem =(tEgyik, tMásik, ..., tKilépés);
TSajátszálam = class(TThread);
  private
   EseményTömb: array[TEseményem]of THandle;
  constructor Create;
  procedure Ecexute; override;
  procedure SignalEvent;
  procedure DoEvent1;

const TSajátszálam.Create;
begin
inherited Create(true);
for i := Low(TEseményem) to High(TEseményem) do
  CreateHandle(EseményTömb[i], false);
  Resume;
end;
  
proc TSajátszálam.Execute;
begin
   while not Terminated do begin
     case WaitforMultipleObject(EseményTömb, hánydarab, INFINITE) of
       Wait_Object0 + 0: ResetEvent(EseményTömb[tEgyik]);
                         Synchronize(DoEvent1);
       Wait_Object0 + 1: ResetEvent(EseményTömb[1]);
                         Synchronize(második esemény funkció);
     end;
   end;
for i := Low(TEseményem) to High(TEseményem) do
  CloseHandle(EseményTömb[i]);
end;

proc TSajátszálam.SignalEvent(melyik: TEseményem);
begin
 SetEvent(EseményTömb[melyik]);
end;

proc TSajátszálam.DoEvent1;
begin
 kiír("kukucs :)");
end;

initialization
 szálam := TThread.Create(false);

Finalization
 Szálam.Terminate;
 SignalEvent(kilépés);
 Szálam.Free;



More information about the Elektro mailing list