2011-01-14 5 views
-2

j'utilise Rufus :: Scheduler pour planifier une tâche, le code est ci-dessous:Rufus :: Planificateur rejoindre ne peut pas sortir enfin en rubis

class Scheduler 
    def self.run 
    scheduler = Rufus::Scheduler.start_new 
    job = scheduler.in '5s', A.new 
    scheduler.join 
    end 
    class A 
    def call(job) 
     puts "xxxxxx" 
    end 
    end 
end 
Scheduler.run 

après l'exécution du code, il a l'impression « xxxx » , mais après l'exécution de la méthode d'appel, la jointure ne peut pas sortir par elle-même et reste toujours en attente.

Y at-il un moyen de quitter la jointure après avoir attendu pour terminer le travail? Merci.

+0

Y a-t-il quelqu'un qui sait s'arrêter élégamment? – ywenbo

+0

Quelqu'un peut-il répondre à ma question? Merci d'avance. – ywenbo

Répondre

-3

Utiliser du fil simple peut atteindre l'exigence.

2

Le planificateur est destiné à fonctionner "pour toujours". L'appel de "join" rejoint le thread du planificateur et ne se termine que lorsque le thread meurt.

Vous devriez reconsidérer votre code, vous essayez d'utiliser un marteau comme un tournevis.

+0

pour Thread, lorsque le thread rejoint terminé toutes les choses, le thread principal va sortir, le chemin est plus raisonnable. pour scheduler je pense que cela devrait être, mais ce n'est pas le cas. maintenant ce que je veux, c'est qu'il a la fonction de planifier, joindre et peut sortir par lui-même au lieu de toujours. – ywenbo

+1

No. Si vous devez quitter après un travail, il suffit de dormir, de faire le travail et de quitter. – jmettraux

+0

pas raisonnable, travail différent a besoin de temps différent pour terminer, ce n'est pas prévisible, comment régler le temps de sommeil, pas pratique – ywenbo

Questions connexes