【发布时间】:2018-08-07 17:30:21
【问题描述】:
我正在尝试围绕 Ruby 中的线程和 Yielding 进行研究,但我有一个关于如何将块传递给 yield 线程的问题。
具体来说,我有一个正在休眠的线程,等待被告知做某事,如果被告知,我希望该线程执行不同的块(即,它正在休眠,并且如果用户按下按钮,除了睡觉做点什么)。
假设我有这样的代码:
window = Thread.new do
@thread1 = Thread.new do
# Do some cool stuff
# Decide it is time to sleep
until @told_to_wakeup
if block_given?
yield
end
sleep(1)
end
# At some point after @thread1 starts sleeping,
# a user might do something, so I want to execute
# some code in @@thread1 (unfortunately spawning a new thread
# won't work correctly in my case)
end
有可能吗?
我尝试使用 @@thread1.send(),但 send 正在寻找方法名称。
感谢您抽出宝贵时间查看此内容!
【问题讨论】:
-
听起来你需要一个事件循环。看看使用Queue 处理信号线程。
-
我快速浏览了 Queue,但看起来该块不会在 thread1 中执行。在这种情况下,我基本上需要 thread1 来执行我传递给它的块,其他任何执行块的东西都不能正常工作(所有这些都与 thread1 在代码的其他部分中的使用方式有关)
标签: ruby multithreading yield