Witam
Przeczytałem dzisiaj z grubsza ten "wątek" i wrzucę swoje 3 grosze. Otóż, zawsze, ale to bezwzględnie zawsze trzeba mieć na uwadze możliwość "jednoczesnego" dostępu do zmiennych gobalnych przy stosowaniu wątków. Dlatego też zawsze trzeba stosować mechanizmy takie jak sekcje krytyczne, czy synchronizacje. To że Tobie się wydaje, że to nie był problem - masz racje tylko Ci się wydaje. Czasem można sprawę rozwiązać przez threadvar zamiast var, ale działa to wolno, a poza tym w Twoim przypadku nie jest to chyba rozwiązanie. Jeśli stwierdziłeś, że kolejne wątki odpalają Ci się zanim skończy się poprzedni, to jak najbardziej <ort>równierz </ort>może to być przyczyną przepełnienia stosu - ale taka sytuacja w poprawnie zprojektowanej aplikacji nie powinna mieć miejsca. Jeśil wybierzesz rozwiązanie pt. "Licznik uruchomionych wątków" to, też powinieneś zastosować sekcje krytyczne.
Żeby od razu nie robić burzy w szklance wody, piszę tego posta nie <ort>po to </ort>abyś się poczuł obrażony/urażony, tylko po to żebyś się przekonał do właściwego stylu prazy z wątkami. Poszukaj sobie na interncie to sam się przekonasz, że wiele osób które Ci tutaj odpowiedziały mają racje. Jak masz możliwość, to przeczytaj sobie Vademecum <ort>Profesionalisty </ort>do D4. Tam (chyba w 2 tomie), wyjaśnione jest po co są sekcje i Synchronize w bardzo przystępny sposób.
Programowanie z użyciem wątków, ma swoje wady i zalety. Jedną z wad jest fakt, że trudno wychwytuje się błędy, choćby przy użyciu debugger'a. Kolejność wykonywania wątków (zarówno głównego jak i podrzędnych), nie jest do przewidzenia. Jedyna pewna rzecz jest taka, że system przydzieli czas procesora dla każdego z nich, ale co w tym czasie Twój wątek zdąży, i w jakim momencie system go wstrzyma to tego nawet najstarsi górale nie wiedzą.
P.S. bardzo mnie ciekawi w jaki sposób zapewniasz uruchamianie tych wątków co te 10ms ; )
Pozdrawiam