On 18.01.2009 19:04, Jakub PavlùÌ jn. wrote:
> Hello,
> 
> In my game freeVikings [http://freevikings.sf.net] I have code listed below.
> It uses threads and sometimes problem known as "thread starvation" occurs.
> Does anyone know some solution?
> (A more detailed description is under the code listing.)
> 
> ----------------------------------
> def do_loading(&block)
>   Thread.abort_on_exception = true
> 
>   load_t = Thread.new {
>     Thread.current.priority = 1
>     Thread.stop
> 
>     block.call
>   }
> 
>   progressbar_t = Thread.new {
>     Thread.current.priority = 2
>     load_t.run
> 
>     loop {
>       paint_loading_screen @app_window, true
>       sleep 0.3
>     }
>   }
> 
>   load_t.join
>   Thread.kill progressbar_t
> end
> ----------------------------------
> 
> It's an instance method of class Game and is used in this way:
> a_game.do_loading {
>   # load something here
> }
> 
> Purpose of this method is to show a simple progressbar while doing some 
> long-lasting operation (e.g. loading new level).
> 
> It creates two threads: load_t, in which given block is executed
> and progressbar_t, which regularly calls Game#paint_loading_screen 
> (method, which repaints loading screen with progressbar).
> 
> Thread progressbar_t has higher priority, because I need it to be called
> often and not to e.g. wait for load_t's end.
> 
> Unfortunatelly from time to time Thread load_t is somehow "suspended" - 
> progressbar shows progress on and on, but nothing happens.
> I think it's a case of so called "thread starvation" and would be very glad
> to know how to avoid it.

I guess this depends on what you do in "block".  It's difficult to 
analyze this without having all the information...

Can you provide more detail?

Cheers

	robert

-- 
remember.guy do |as, often| as.you_can - without end