Temat: Pytanie odnośnie tworzenia wątków
Dariusz Sieńkowski:
Są to pętle FOR odpowiadające za płynne zaświecenie diód RGB.
A ta "dioda RGB", to co to dokładnie jest?
Kontrolka na formie czy dioda w jakimś czymś podłączonym np. do portu COM?
Każda pętla przypisana jest do odpowiedniej konfiguracji diód np. petla1 -> R, pętla2 -> RG. Cała procedura ma za zadanie płynne włączanie diód: R -> RG -> GB itp. i tak w kółko, aż użytkownik jej nie zatrzyma. Procedurę już napisałem i działa lecz jak ją się uruchomi to wykonywające się pętle blokują działanie programu, blokując również możliwość użytkownikowi jej wyłączenia.
OK.
Co to znaczy płynne przełączenie diód?
Dla człowiek płynne to będzie jakieś 25 na sekundę; dla komputera to ślamazarnie wolno.
Możesz pokazać tę pętle?
Ale generalnie tak:
1) Piszesz wątek
2) W metodzie Execute wywołujesz te swoje pętle
3) W pętli dajesz opóźnienie, np. sleep(40);
4) Po opóźnieniu przełączasz diody (wszystko w wątku!), ale sam kod zmieniający kolory wykonujesz za pomocą SYNCHRONIZACJI (TThread.Synchronize)
i to wszystko...
Przy okazji - które Delphi?
Bo od wersji 2010 (nie pamiętam dokładnie czy też nie 2009), możesz napisać tak:
procedure TMyThread.Execute;
begin
while not Terminated do
begin
sleep(40);
Synchronize
(
procedure
begin
if Form.DiodaR.Active then
begin
Form.DiodaR.Active := False;
Form.DiodaG.Active := True;
Form.DiodaB.Active := False;
end
else
if Form.DiodaG.Active then
begin
Form.DiodaR.Active := False;
Form.DiodaG.Active := False;
Form.DiodaB.Active := True;
end
else
if Form.DiodaB.Active then
begin
Form.DiodaR.Active := True;
Form.DiodaG.Active := False;
Form.DiodaB.Active := False;
end;
end
);
end;
W sumie to jest cały kod, bez utworzenia klasy TThread - ale w Delphi robi to automat...