I was thinking about some of the design issues in my dice.rb script:
http://www2.codegnome.org:59321/scripting/showscript.php?script=dice.rb
and one of the major issues is queueing. I’d like to ensure that
selecting multiple URLs doesn’t overwrite the current contents from the
previous X selection, so I was thinking what I needed to do was
implement a FIFO stack.
My main issues are that I don’t want to miss any X selections, but at
the same time I don’t want ruby running in such a tight loop that it
sucks up excessive CPU time.
Right now, I’m doing:
loop do;
grab X selection
# time-consuming WWW::Mechanize stuff with selection
sleep 0.3
end
which isn’t really event driven. So, if I select several URLs in quick
succession, only the URL in the X selection the next time ruby looks at
it gets handled.
Suggestions?
On Sep 11, 2007, at 1:01 PM, Todd A. Jacobs wrote:
Suggestions?
require ‘thread’
q = Queue.new
consumer = Thread.new do
while(( pair = q.pop ))
event, data, *ignored = pair
case event
when :something
when :something_else
end
end
end
q.push [:somthing, ‘some data’]
…
a @ http://drawohara.com/
On 11.09.2007 21:01, Todd A. Jacobs wrote:
I was thinking about some of the design issues in my dice.rb script:
http://www2.codegnome.org:59321/scripting/showscript.php?script=dice.rb
and one of the major issues is queueing. I’d like to ensure that
selecting multiple URLs doesn’t overwrite the current contents from the
previous X selection, so I was thinking what I needed to do was
implement a FIFO stack.
There is no such thing as a “FIFO stack”. A stack has LIFO semantics -
a queue FIFO.
end
which isn’t really event driven. So, if I select several URLs in quick
succession, only the URL in the X selection the next time ruby looks at
it gets handled.
Suggestions?
If you have a single thread you can use an Array.
irb(main):022:0> q=[]
=> []
irb(main):023:0> 5.times {|i| q.push i}
=> 5
irb(main):024:0> until q.empty?; p q.shift; end
0
1
2
3
4
=> nil
Otherwise you can use a Queue as suggested by Ara. From your problem
description it seems you rather want a multithreaded solution.
Kind regards
robert
On Sep 11, 2007, at 17:10 , Robert K. wrote:
On 11.09.2007 21:01, Todd A. Jacobs wrote:
I was thinking about some of the design issues in my dice.rb script:
http://www2.codegnome.org:59321/scripting/showscript.php?
script=dice.rb
and one of the major issues is queueing. I’d like to ensure that
selecting multiple URLs doesn’t overwrite the current contents
from the
previous X selection, so I was thinking what I needed to do was
implement a FIFO stack.
Did you try this?
array = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
array.shift
=> 1
array
=> [2, 3, 4, 5]
array << 6
=> [2, 3, 4, 5, 6]
array
=> [2, 3, 4, 5, 6]
array.shift
=> 2
~Wayne
s///g
Wayne E. Seguin
Sr. Systems Architect & Systems Administrator