在线程中调用相同的过程不起作用

时间:2019-01-30 13:02:30

标签: ruby multithreading libgosu

我在Ruby中遇到线程问题。 这是我第一次使用Threads,所以也许我忽略了一些重要的东西。

我有此过程:

  def define_action(field)
    false if field.nil? || field.empty?
    puts field.empty?          <---- ONLY FOR DEBUG
    case field['special']
    when 'signpost'
      typewriter_animation(field['message'])
    else
      typewriter_animation("TO DO ... add action for #{field['special']}") 
    end
  end

typewriter_animation清除字段,放入文本并等待5秒钟,然后再次清除字段。

我在线程中使用define_action

   @timer = Thread.new do
    @engine.define_action(@map.next_field_coordinates)
  end

fieldempty时(我在提示符下看到true)我什么都没有,但程序继续并在屏幕上显示“要做...添加操作”

没有Thread的相同代码可以正常工作,但是显然可以使屏幕停止显示5秒钟。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:3)

您的监护人条款缺少return

def define_action(field)
  false if field.nil? || field.empty? # this line does nothing
  ...
end

应该是:

def define_action(field)
  return false if field.nil? || field.empty?
  ...
end

我不知道线程会产生什么变化。