pompon


Każdy z tysiąca żółwi rysuje jedną nitkę w pomponie. Żółwie są opisane przez klasę "model", która definiuje funkcję obsługi sygnału "krok": obrót i krok w przód z losowo zmienianymi parametrami. Program tworzy 1000 żółwi, ale liczbę tą można zwiększać w miarę możliwości komputera.

Warto zwrócić uwagę na następujące elementy programu:

  • sygnał "krok" wysyła żółw, który został utworzony specjalnie do tego celu - ten żółw nie należy do klasy "model" i sam nic nie rysuje; pętla forever, którą wykonuje, mogłaby być wykonana także przez głównego żółwia, ale zablokowałoby to wykonanie instrukcji z linii poleceń;
  • przycisk "Stop"/"Go!" zmienia wartość zmiennej współdzielonej :go (widocznej dla wszystkich żółwi) i pozwala wstrzymać rysowanie; gdy :go = true żółw :u w pętli wysyła sygnał "krok" z maksymalną prędkością, gdy :go = false żółw :u w każdej iteracji pętli czeka 10 milisekund by nie obciążać procesora wykonywaniem pustej pętli;
  • sygnał "krok" jest sygnałem blokującym, tzn. program żółwia wysyłającego sygnał jest wstrzymywany do czasu zakończenia wszystkich funkcji obsługi uruchomionych przez ten sygnał - zapewnie to wykonanie tej samej liczby kroków przez wszystkie żółwie;
  • żółwie są tworzone jednocześnie przy pomocy "asynchronicznego" konstruktora: (anewt $model :h :c); zmiana tej instrukcji na: (newt $model :h :c) (instrukcja bez początkowej literki "a") spowoduje, że żółwie będą tworzone kolejno, co wyraźnie spowolni uruchomienie programu przy dużej liczbie żółwi :n.

pobierz projekt