2015-08-16 5 views
0

Допустим, я внутри нити:Выполнить код на основной теме ruby ​​из другого потока?

Thread.new do 
    #something 
end 

И давайте говорить, что «что-то» не является поточно и должен работать в главном потоке.

Есть ли какой-либо путь в Ruby для отправки этого кода в основной поток?

+4

Пожалуйста, смотрите на http://stackoverflow.com/questions/10045693/how- to-communication-with-threads-in-ruby и http://stackoverflow.com/questions/3208462/does-ruby-have-the-java-equivalent-of-synchronize-keyword –

ответ

0

Вы можете использовать очереди, чтобы отправить Proc на основные нити, а затем вызвать их из главного потока, как это:

command_queue = Queue.new 

# Child thread 
Thread.new do 
    sleep 1 

    command_queue << proc { puts "1" } 

    sleep 1 

    command_queue << proc { puts "2" } 

    sleep 1 

    command_queue << proc { exit } 
end 

# Main thread 
while command = command_queue.pop 
    command.call 
end 
Смежные вопросы