20.5. Niszczenie wątków

Problem

Chcemy zniszczyć wątek przed zakończeniem programu.

Rozwiązanie

Wątek kończy działanie w momencie, kiedy dotrze do końca swojego bloku kodu. Najlepszym sposobem wcześniejszego zniszczenia wątku jest wymuszony skok na koniec jego bloku kodu. Dzięki temu przed zniszczeniem wątek może uruchomić kod porządkujący.

Poniższy wątek wykonuje pętlę w czasie, kiedy zmienna egzemplarza continue ma wartość true. Wystarczy ustawić tę zmienną na false, aby wątek zszedł śmiercią naturalną:

require 'thread' class CounterThread < Thread def initialize @count = 0 @continue = true super do @count += 1 while @continue puts "Zdążyłem policzyć do #{@count} i zostałem brutalnie zatrzymany." end end def stop @continue = false ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.