in reply to Building a thread pool
Here is an example using Tk Tk-with-worker-threads
It demonstrates a "sleeping thread pool". The script allows you to set how many to make ( set up as max= 3), then it keeps an array, which you shift and push, to keep track of available (free) workers. You can pass code to it, and get results thru shared variables. I just have it open and xterm, and when you close the xterm, a count starts. When the thread is finished or cancelled, it goes back to sleep, and is pushed back into the available-array. I have the sleep time as 1 second, but you can improve responsiveness by using a miliisecond value ( select(undef,undef,undef,.01). It will still use very little cpu when sleeping at that interval.
The sleeping thread loop is the essence of what you are after, in the sub "work". I used a goto in it, as a simple way of killing the thread , but you could use a "return" instead.
P.S. The reason I use Tk, is that it allows for an event-loop to monitor the thread's shared vars from main. This is your big problem. The main script will NOT see changes in shared vars, until it actively reads it. So you need a loop of somekind. Maybe POE, Event, or another option like Roll your own Event-loop
|
|---|