Skip to content

Instantly share code, notes, and snippets.

@nanki
Created April 28, 2012 16:28
Show Gist options
  • Save nanki/2520062 to your computer and use it in GitHub Desktop.
Save nanki/2520062 to your computer and use it in GitHub Desktop.
seems slow on 1.9.3
#!/usr/bin/env ruby
# -*- coding: UTF-8 -*-;
require 'thread'
require 'time'
class App
Bus = Struct.new :draw, :visualize
Info = Struct.new :title, :text
def start(*params)
@input_delay, @search_delay, @refresh_rate, @visualize_delay = params
@bus = Bus.new(Queue.new, Queue.new)
@input = Thread.new { input }
@display = Thread.new{ display }
@visualize = Thread.new{ visualize }
[@input, @display].each(&:join)
end
def cpuload(time)
s = Time.now
loop { return if Time.now - s > time }
sleep 0
end
def input
%w(a ab abc abcd abc).each do |keyword|
sleep @input_delay
restart_search(keyword)
end
end
def search(keyword)
list = []
5.times do
cpuload @search_delay
list << Info.new(keyword, nil)
@bus.draw.push [:data, list]
end
end
def restart_search(keyword)
@search.kill if @search
@search = Thread.new { search keyword }
end
def display
data = nil
loop do
sleep @refresh_rate
refreshed = false
while message = @bus.draw.shift(true) rescue nil
refreshed = true
case message.first
when :refresh
when :data
data = message.last
end
end
next unless refreshed
puts '--------- result'
data.each do |v|
puts v.title
if v.text
puts " #{v.text}"
else
@bus.visualize.push v
end
end
end
end
def visualize
while v = @bus.visualize.shift
cpuload @visualize_delay
v.text = ([v.title] * (rand(5) + 1)).join(' ')
@bus.draw.push [:refresh]
end
end
end
App.new.start(0.5, 0.1, 0.01, 0.01)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment