PaintBox vs. wątek

0

Witam,
mam PaintBox'a na głównej formie, a wątku pobocznym realizuję rysowanie na nim. Wszystko by było ok, gdyby to rysowanie faktycznie się odbywało. Wątek kręci się co 33ms i rysuje wpierw po bitmapie, a następnie korzystając z funkcji BitBlt próbuje przenieśc to co narysował na bitmapie na PaintBox'a. Próbowałem z synchronizacją i bez. Wiem, że samo rysowanie jest poprawne gdyż kod w wersji "bez wątku" działa w 100%, w wątku natomiast rysuje jedynie "pierwszą klatkę". Wątek nie kończy sie po "jednym okrążeniu", działa cały czas, sprawdziłem... Byc może ktoś wie w czym problem? Być może chodzi o jakieś odrysowywanie, które w wątku głównym aplikacji realizowane jest na bieżąco, a w pobocznym nie? :| Czekam na sugestie...

0

Pytanie pierwsze :
czy masz jakas petle w watku ?
bo jesli nie, to on SIE NA PEWNO konczy !
To juz pewnie wiesz,ze watek robi execute'a a pozniej sobie nazwijmy to umiera. Moze zamiesc kawalek kodu, bedzie mozna spojzec co jest ewentualnie nie tak.
Tak na szybko co przychodzi do glowy to, ze moze nie odswiezasz bitmapy po rysowaniu. Chociaz to i tak powinno dzialac, ale w tej chwili sobie gdybam.

0

....co do pętli w wątku, to na pewno jest i na pewno się kręci. Próbowałem nawet z:

while (true) do
   begin
     ...
   end;

więc wątek na pewno się za wcześnie nie kończy. Co do odświeżania TPaintBox'a, to raczej nie o to chodzi, gdyż jak mówiłem wątek robi pętelkę co 33ms, więc jedyne co bym widział to migoczący kawałek PaintBox'a.
Chcę zauważyć, że w głównym wątku aplikacji, tyle, że z wykorzystaniem TTimer'a, kod działa bez zarzutu... Być może chodzi o samo płótno TPainBox'a - być może wątek poboczny nie ma do niego (?!) dostępu? ...UnLock i Lock?

0

Co do Lock i UnLock to na pewno musisz to stosowac.
Zapobiega to nakladaniu sie rysunkow poszczegolnych watkow, poza tym dobrym nawykiem przy stosowaniu watkow i rysowaniu na canvasie stosowaniu wlansie tego. Tak samo jak uzywaniu synchronize w czasie <ort>kozystania </ort>ze zmiennych globalnych itp.
I chociaz Lock sluzy raczej temu, zeby inny watek nie nadpisal Ci niczego na canvasie, w chwili kiedy inny cos na nim rysuje, to jednak dobrze go stosowac.
<ort>Sproboj </ort>z tym Lockiem i daj znac jak poszlo.
Bedziemy kombinowac dalej :)

0

...co do Lock i Unlock to działa, wystarczyło zapewnić sobie "wyłączność" na Canvas :) Jednak pojawił się błąd podczas zamykania aplikcaji, z tego co się doczytałem w sieci ma on właśnie związek z Lock'iem i Unlock'iem: AccesViolation w bibliotece ntdll.dll. Błąd czasami się pojawia, a czasami nie, może ktoś się już z tym spotkał i wie jak temu zaradzić? :|

1 użytkowników online, w tym zalogowanych: 0, gości: 1