Witam! Podczas poruszania tematu ilości optymalnych wątków dla programu (tutaj: https://www.elektroda.pl/rtvforum/topic2205517.html#10570584) "wyskoczył" pewien problem z którym nie mogę się uporać.
W programie obliczenia wykonuje kilka wątków, wyniki chciałbym rysować na bieżąco na Canvas mojej formy głównej.
Niestety, po jakimś czasie pracy programu kompilator wywala następujący błąd: Canvas does not allow drawing'. Zgłaszający wątek zawiesza się (właściwie to zgłasza OnTerminate, które przejąłem), pozostałe kontynuują pracę. Znów po losowym obiegu sytuacja się powtarza, aż wszystkie wątki się zawieszą.
Kompilator kolejno wskazuje na wszystko co wykorzystuje Canvas (wykreślałem linijki kodu, żeby sprawdzić z czym może to mieć związek), np.:
Procedurę rysowania wywoływałem poprzez TThread.Synchronize, ale wówczas kompilator zgłasza mi błąd: Project raised exception class EAccessViolation with message 'access violation in module at adress...
Oto przykład wywołania z tablicy wątków:
Czy to może być kwestia mojej deklaracji, czy tego, że nie można rysować wątkami na Formie? Wkleić kompletny kod?
W programie obliczenia wykonuje kilka wątków, wyniki chciałbym rysować na bieżąco na Canvas mojej formy głównej.
Niestety, po jakimś czasie pracy programu kompilator wywala następujący błąd: Canvas does not allow drawing'. Zgłaszający wątek zawiesza się (właściwie to zgłasza OnTerminate, które przejąłem), pozostałe kontynuują pracę. Znów po losowym obiegu sytuacja się powtarza, aż wszystkie wątki się zawieszą.
Kompilator kolejno wskazuje na wszystko co wykorzystuje Canvas (wykreślałem linijki kodu, żeby sprawdzić z czym może to mieć związek), np.:
Kod: Delphi
Procedurę rysowania wywoływałem poprzez TThread.Synchronize, ale wówczas kompilator zgłasza mi błąd: Project raised exception class EAccessViolation with message 'access violation in module at adress...
Oto przykład wywołania z tablicy wątków:
Kod: Delphi
Czy to może być kwestia mojej deklaracji, czy tego, że nie można rysować wątkami na Formie? Wkleić kompletny kod?