Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Thoughts on loops and stacks
Todd A. Jacobs
9/11/2007 7:01:00 PM
I was thinking about some of the design issues in my dice.rb script:
http://www2.codegnome.org:59321/scripting/showscript.php?scri...
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?
--
"Oh, look: rocks!"
-- Doctor Who, "Destiny of the Daleks"
2 Answers
ara.t.howard
9/11/2007 7:36:00 PM
0
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://draw...
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama
Robert Klemme
9/11/2007 9:09:00 PM
0
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?scri...
>
> 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.
> 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?
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
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Thoughts on loops and stacks
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password