我正在尝试在Ruby中实现一个线程竞赛,它应该显示终端中的每个线程进度(实时类型)。我被阻挡了我需要移动到前一个终端线的位置。
我使用此解决方案atm:
bar, bar2 = '', ''
50.times do |i|
bar << '='
bar2 << '**'
puts "#{bar} - #{i+1}0%"
print "#{bar2} - #{i+1}0%"
print "\033[F\r"
sleep 0.3
end
它仍然仅适用于2个条形图,我不知道如何使用更多的线程进行缩放。
答案 0 :(得分:2)
应该广泛使用escape sequences for cursor movement
:
BARS_COUNT = 3
SYMBOLS = %w|= ** ℹℹℹ|
BARS = ['', '', '']
BARS_COUNT.times { puts } # prepare the space
20.times do |i|
print "\033[#{BARS_COUNT}A"
BARS_COUNT.times do |pos|
BARS[pos] << SYMBOLS[pos]
puts "\033[#{i * SYMBOLS[pos].length}C#{SYMBOLS[pos]}"
end
sleep 0.1
end
对于更复杂的定位,请使用我链接的参考文献中描述的\033[<L>;<C>f
。