Poczytaj może o synchronizacji wątków i o sekcjach krytycznych bo tu jest mnóstwo błędów.
True:
TTest = class(TThread)
[...]
public
jest:boolean;
trafiony:boolean;
numer:integer;
koniec:boolean;
end;
Wątki między sobą nie mają nic wspólnego nie modyfikują nic na zewnątrz.
Nie no, serio? A może jednak?
//wczytuje stałą do puźniejszych obliczeń
Ja tu widzę błąd, tylko że z TBrain.
Jak nic mądrego nie umiesz powiedzieć to się nie produkuj bez sensu, A najlepiej skasuj swój post i napisz jeszcze raz.
Akurat to ty nic mądrego nie umiesz zrobić i dlatemu przychodzisz na forum. Najlepiej skasuj się i stwórz się raz jeszcze. Akurat on jedyny wskazał poprawną przyczynę twoich problemów.
- Zawieszasz aplikację sprawdzając stan wszystkich wątków w pętli (button4click). Czy w takim razie w ogóle potrzebne Ci są wątki?
Wiesz, to ta magia większej wydajności która jest mitem :>
Na dodatek koleś nie dość że bez sensu zakłada że potrzebuje wątków to jeszcze nie umie ich użyć...
To pierwsze jest jak najbardziej z sensem. Widać jeszcze nie zetknąłeś się z przypadkiem kiedy wątek się skończył zanim dałeś FreeOnTerminate:=true;
Wytłumacz mi, jak konstruktor, który jest wykonywany z kontekstu głównego wątku może nie zdążyć przed przyznaniem czasu wątkowi.
Create wątku już się wykonała w inherited Create... na starszych Delphi ciągle był ten problem, pamiętam jak straciłem kilka tygodni na szukanie co się chrzani :/ Wydawało mi się że od 7-ki już działa dobrze, a jednak nie. Dopisze przykład do postu na dole.
No to co by się stało gdybyś kontrolę do inherited oddał dopiero po ustawieniu pól... Bo moim zdaniem to czego osiągnąć ty nie umiesz bez zawieszania...
A jednak:
A jednak co? Nawet dziecko wie że inherited
wywoła metody odpowiadające za tworzenie wątku.
Jeżeli nie jesteś na tyle genialny żeby zrobić to co trzeba przed inherited
to równie dobrze możesz to zrobić z poziomu nowego wątku, czyż nie? I gdzie tu problem? Bo moim zdaniem to problem jest sztuczny.