Ich hab mich gestern und heute nochmal intensiv durch eure Vorschläge und Codes durchgearbeitet und ich habs tatsächlich geschafft 3 Threads zum laufen zu bringen
ich hab das ganze auch einfach mit 3 Variabelen die jeweils von einem Thread hochgezählt werden und es hat auch supi funktioniert
nur wie ich den LPT-Portzugriff eingebaut hab (ich versuche nämlich auf 3 DigiPorts vom LPT ein pulsweitenmoduliertes Signal auszugeben) hatte ich den eindruck, dass mein Programm gar nix mehr macht
Delphi-Quellcode:
uses
HW_Types, HW_32;
[...]
var
b_LED1_1 : Byte;
b_LED1_2 : Byte;
b_LED1_on : Byte;
b_max: Byte = 40;
aThreads : TList;
implementation
{$R *.DFM}
uses SyncObjs;
Type
T_LED1_Thread = Class (TThread)
Private
fID : Integer;
Protected
Constructor Create (aID : Integer);
Procedure Execute;Override;
End;
constructor T_LED1_Thread.Create(aID : Integer);
begin
Inherited Create (True);
fID := aID;
Resume;
end;
procedure T_LED1_Thread.Execute;
begin
While not Terminated do
begin
for b_LED1_1 := 0 to b_LED1_on do
MainForm.HW32.Pin[2] := false; //not true
if (b_max - b_LED1_on) > 0 then
for b_LED1_2 := 0 to b_LED1_on do
MainForm.HW32.Pin[2] := true; //not false
Application.ProcessMessages;
end;
end;
procedure TMainForm.B_OpenDriverClick(Sender: TObject);
begin
aThreads := TList.Create;
T_LED1_Thread.Create(0);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
Var
i : Integer;
begin
While aThreads.Count > 0 do begin
With T_LED1_Thread (aThreads[0]) do begin
WaitFor;
Free;
End;
aThreads.Delete(0);
End;
aThreads.Free;
end;