Witam usiłuję zoptymalizować program do wykrywania ruchu, i pojawił sie mały program tzn. program działa w oparciu o dwa timery. Niestety po uruchomieniu cale działanie programu mocno zwalnia, procedury zegarów sa dość małe wiec nie chciałem sie bawić z watkami zwłaszcza ze moje doświadczenie w tym zakresie jest dość znikome. Google podpowiedziało mi AsyncCalls jednak nadal nie udaje sie osiągnąć zadowalającego działania nadal sa duże przycinki. Proszę o pomoc jak można inaczej osiągnąć stabilne działanie programu. Poniżej procedury w oparciu o Asyncalls. wątków
procedure zegar2;
var
RapErreur : Integer;
begin
If Debut = False Then AnalizaOtoczenia.Detection.Interval := 1000 Div (AnalizaOtoczenia.ScrollBar16.Position);
sendmessage(hcam,1084,0,0);
sendmessage(hcam,1054,0,0);
If Num = 0 Then
Begin
Bmp1.LoadFromClipboardFormat(cf_bitmap,clipboard.GetAsHandle(cf_bitmap),0);
Bmp1.Canvas.stretchDraw(rect(Bmp1.width,0,0,Bmp1.height),Bmp1);
Num := 1
End
Else
Begin
Bmp2.LoadFromClipboardFormat(cf_bitmap,clipboard.GetAsHandle(cf_bitmap),0);
Bmp2.Canvas.stretchDraw(rect(Bmp2.width,0,0,Bmp2.height),Bmp2);
Num := 0;
Debut := True;
End;
If Debut = False Then Exit;
RapErreur := Difference;
If RapErreur > MaxSensi Then
Begin
AnalizaOtoczenia.Mouvement.Caption := 'Wykryto Ruch';
AnalizaOtoczenia.ProgressBar3.StepIt;
If AnalizaOtoczenia.CheckBox1.Checked Then AnalizaOtoczenia.SaveJpg(RapErreur);
End
Else
Begin
AnalizaOtoczenia.Mouvement.Caption := '';
End;
end;
procedure zegar;
begin
sendmessage(hcam,1084,0,0);
sendmessage(hcam,1054,0,0);
AnalizaOtoczenia.image1.Picture.LoadFromClipboardFormat(cf_bitmap,clipboard.GetAsHandle(cf_bitmap),0);
AnalizaOtoczenia.image1.Canvas.stretchDraw(rect(AnalizaOtoczenia.image1.width,0,0,AnalizaOtoczenia.image1.height),AnalizaOtoczenia.Image1.Picture.Bitmap);
end;
A tak wywołuję to w zegarach.
procedure TAnalizaOtoczenia.AffichageTimer(Sender: TObject);
var
Call:IAsyncCall;
begin
call:= AsyncCall(@zegar,[]);
end;
procedure TAnalizaOtoczenia.DetectionTimer(Sender: TObject);
var
Call:IAsyncCall;
begin
call:= AsyncCall(@zegar2,[]);
end;