AsyncCall zamiast wątków

AsyncCall zamiast wątków
tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

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

Kopiuj

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.

Kopiuj

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;


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
0

Proszę o pomoc jak można inaczej osiągnąć stabilne działanie programu.

Wątki?

Nie rozumiem. Najpierw twierdzisz że wątki są trudne, więc używasz czegoś czego nie znam i narzekasz że nie spełnia twoich oczekiwań. Dosyć oczywistym by było użycie wątków, nie sądzisz?

tayamoto
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:81
0

Próbowałem wrzucić to w 2 niezależne watki ale po kilku bez owocnych godzinach odpuściłem, wiem ze to trochę trolowanie ale proszę o pomoc przerobieniu jednej z procedur na watek.


------------------------------------------
If it’s hard, work harder; if it’s impossible, work harder still. Give it whatever it takes, but do it. - Burt Munro
0
tayamoto napisał(a):

wiem ze to trochę trolowanie ale proszę o pomoc przerobieniu jednej z procedur na watek.

"Wiem że robię źle ale pomóżcie mi robić źle'. Jakieś to chore.

Próbowałem wrzucić to w 2 niezależne watki ale po kilku bez owocnych godzinach odpuściłem,

http://wiki.freepascal.org/Multithreaded_Application_Tutorial
Ja się tylko z tego nauczyłem. Nie uważam ciebie za głupszego od siebie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.