Penso che questa sia davvero una domanda sulla modellazione di domini.
Non ci sarebbe nulla di sbagliato in ciò che si sta facendo se si desidera estendere/migliorare il modo in cui si comporta un thread, ad esempio per aggiungere debug o output di prestazioni, ma non penso che sia ciò che si desidera.
Probabilmente vuoi modellare qualche concetto nel tuo dominio con oggetti attivi. In tal caso, l'approccio standard di Ruby è migliore perché consente di ottenere questo risultato senza piegare il modello di dominio.
L'ereditarietà dovrebbe essere utilizzata solo per modellare le relazioni IS_A. Il codice rubino standard per questo avvolge perfettamente la soluzione.
Per rendere il vostro oggetto attivo, hanno esso cattura il filo appena creato in un certo metodo
Class MyClass
...
def run
while work_to_be_done do
some_work
end
end
...
end
threads = []
# start creating active objects by creating an object and assigning
# a thread to each
threads << Thread.new { MyClass.new.run }
threads << Thread.new { MyOtherClass.new.run }
... do more stuff
# now we're done just wait for all objects to finish ....
threads.each { |t| t.join }
# ok, everyone is done, see starships on fire off the shoulder of etc
# time to die ...
fonte
2009-06-27 17:30:54
Puoi descrivere quale sarebbe l'approccio standard di Ruby? Sarebbe solo passare un blocco di codice all'oggetto Thread? –
Sì - Thread.new {do_stuff} è l'approccio più comune che ho visto. –
Ho aggiornato la mia risposta con un esempio di oggetto attivo –