Take zoom/panning as an example: When I zoom to a certain level I often do some zooming or panning within a few seconds again because the viewport is not adjust the way I really want it to be.
I agree with you in principle and therefore the 'pooling' of threads in the new ThreadQueue is only light version: just keeping a running thread a little alive. For say one second instead of five?! - Sascha Larry Becker schrieb: > Thread pooling may be important for servers, but it doesn't seem to be > a performance factor in JUMP. If no new jobs are being added in 50 > ms, the cpu is probably idle anyway. > > regards, > Larry > > On 6/15/07, Sascha L. Teichmann <[EMAIL PROTECTED]> wrote: >> Not if you want to do thread pooling. >> >> The real problem: How can I get a notification >> when a zoom is done? >> >> The ZoomToSelectedItemsPlugIn ThreadQueue code looks >> like a workaround due to lack of a real possibility >> to get informed when the zoom is done. >> >> I will have a look at this problem. >> >> regards, >> Sascha >> >> >> Larry Becker schrieb: >>> I cut the WORKER_STAY_ALIVE_TIME to 50 ms and the flash now works. 50 >>> ms is an eternity in CPU time anyway. >>> >>> regards, >>> Larry >>> >>> On 6/15/07, Larry Becker <[EMAIL PROTECTED]> wrote: >>>> Thanks for finding that Listener use in ZoomToSelectedItemsPlugIn. I >>>> tried it and it doesn't flash anymore. >>>> >>>> regards, >>>> Larry >>>> >>>> On 6/15/07, Sascha L. Teichmann <[EMAIL PROTECTED]> wrote: >>>>> In core the >>>>> >>>>> com.vividsolutions.jump.workbench.ui.zoom.ZoomToSelectedItemsPlugIn >>>>> >>>>> uses the ThreadQueue.Listener interface. But the code looks like it can >>>>> cope with the 'slightly' shifted semantic. >>>>> >>>>> I would vote for stick a @deprecated tag (+ some explanations) >>>>> to the respective methods and to the interface because code >>>>> that uses these mechanisms is possibly not aware of the >>>>> sophisticated difference between 'no running threads left' >>>>> and 'all jobs done'. >>>>> >>>>> - Sascha >>>>> >>>>> >>>>> Larry Becker schrieb: >>>>>> Hi Sascha, >>>>>> >>>>>> Adding a 'wakeup' Runnable works great and is easier than using the >>>>>> listener anyway. >>>>>> >>>>>> By the way, I couldn't find any other code using the Listener >>>>>> interface, but I suppose there could be a Plug-in somewhere that does. >>>>>> We should probably leave it out anyway since if we are leaving it in >>>>>> for compatibility, it should actually be compatible. The easiest way >>>>>> to find out if it is really needed by anyone but me might be to leave >>>>>> it out and see if it breaks anyone's compile. The same applies to >>>>>> getRunningThreads since it doesn't behave exactly like it did before >>>>>> either. >>>>>> >>>>>> Anyway, thanks for the help. I'm able to determine the end of >>>>>> rendering much more accurately now. >>>>>> >>>>>> regards, >>>>>> Larry Becker >>>>>> >>>>>> On 6/15/07, Sascha L. Teichmann <[EMAIL PROTECTED]> wrote: >>>>>>> Hello Larry, >>>>>>> >>>>>>> the version of the ThreadQueue is a bit outdated. >>>>>>> The version you have has no getRunningThreads() method. >>>>>>> This is need for compatibility. And there was a bug in >>>>>>> remove(Listener) which is fixed by now. >>>>>>> I attach the current ThreadQueue. >>>>>>> >>>>>>> Now to your problem: >>>>>>> >>>>>>> The Listeners are in for compatibility and you are right >>>>>>> they get there kick when the WORKER_STAY_ALIVE_TIME has >>>>>>> expired. But once again: These Listeners _do_ _not_ help >>>>>>> you! You want to know when the last job has ended, not >>>>>>> when there are no more running Threads. We discussed this >>>>>>> already. >>>>>>> >>>>>>> I would suggest the following solution on your side >>>>>>> to archive the desired effect: >>>>>>> >>>>>>> <code> >>>>>>> >>>>>>> Graphics2D destination = ... // from outer space >>>>>>> >>>>>>> LayerViewPanel layerViewPanel = ... // from outer space >>>>>>> >>>>>>> RenderingManager renderingManager = >>>>>>> layerViewPanel.getRenderingManager(); >>>>>>> >>>>>>> ThreadQueue defaultThreadQueue = >>>>>>> renderingManager.getDefaultRendererThreadQueue(); >>>>>>> >>>>>>> // add all the Renderer Runnables to the ThreadQueue >>>>>>> renderingManager.renderAll(); >>>>>>> >>>>>>> final boolean [] locked = { true }; >>>>>>> >>>>>>> // because defaultThreadQueue does its jobs >>>>>>> // one after each other append a 'wakeup' Runnable ... >>>>>>> >>>>>>> defaultThreadQueue.add(new Runnable() { >>>>>>> public void run() { >>>>>>> synchronized (locked) { >>>>>>> locked[0] = false; >>>>>>> locked.notify(); >>>>>>> } >>>>>>> } >>>>>>> }); >>>>>>> >>>>>>> try { >>>>>>> synchronized (locked) { >>>>>>> // you could simply write >>>>>>> // "while (locked[0]) locked.wait();" >>>>>>> // but following is more defensive >>>>>>> int count = 0; >>>>>>> while (locked[0] && count++ < 10) >>>>>>> locked.wait(10000L); >>>>>>> } >>>>>>> } >>>>>>> catch (InterruptedException ie) { >>>>>>> } >>>>>>> >>>>>>> renderingManager.copyTo(destination); >>>>>>> >>>>>>> </code> >>>>>>> >>>>>>> But as I said earlier, this only works on >>>>>>> the defaultRenderingThreadQueue and therefore >>>>>>> its only an interim solution. The >>>>>>> WMS/DB ThreadQueue is private and a true >>>>>>> parallel ThreadQueue. >>>>>>> >>>>>>> My goal is to add a renderAllSynchronized() >>>>>>> to RenderingManager that used the above >>>>>>> Runnable/unlock trick. The secret WMS/DB >>>>>>> will be eliminated (or better the default one >>>>>>> and the WMS/DB ThreadQueue will become the >>>>>>> default). This is doable with the >>>>>>> RunnableArrayList class I posted a while >>>>>>> ago, which simulates the single thread >>>>>>> default ThreadQueue. But one step after >>>>>>> the other ... >>>>>>> >>>>>>> Regards, Sascha >>>>>>> >>>>>>> >>>>>>> Larry Becker schrieb: >>>>>>>> Sascha, >>>>>>>> >>>>>>>> I have reached a point where I need some help with the new >>>>>>>> ThreadQueue implementation. I have modified my code that calls >>>>>>>> getRunningThreads to use the Listener with the >>>>>>>> allRunningThreadsFinished method instead. This was much cleaner and >>>>>>>> worked fine until I replaced ThreadQueue with your version. The >>>>>>>> problem I seem to be having is that the method doesn't fire until >>>>>>>> after the 5 second WORKER_STAY_ALIVE_TIME has expired. Can you >>>>>>>> explain what I should be doing or modify the code so that it fires >>>>>>>> when there are no more jobs waiting? >>>>>>>> >>>>>>>> I have attached the version of ThreadQueue.java that I have been using >>>>>>>> in case it is outdated. >>>>>>>> >>>>>>>> thanks, >>>>>>>> Larry Becker >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------ >>>>>>>> >>>>>>>> ------------------------------------------------------------------------- >>>>>>>> This SF.net email is sponsored by DB2 Express >>>>>>>> Download DB2 Express C - the FREE version of DB2 express and take >>>>>>>> control of your XML. No limits. Just data. Click to get it now. >>>>>>>> http://sourceforge.net/powerbar/db2/ >>>>>>>> >>>>>>>> >>>>>>>> ------------------------------------------------------------------------ >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Jump-pilot-devel mailing list >>>>>>>> Jump-pilot-devel@lists.sourceforge.net >>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>>>> ------------------------------------------------------------------------- >>>>>>> This SF.net email is sponsored by DB2 Express >>>>>>> Download DB2 Express C - the FREE version of DB2 express and take >>>>>>> control of your XML. No limits. Just data. Click to get it now. >>>>>>> http://sourceforge.net/powerbar/db2/ >>>>>>> _______________________________________________ >>>>>>> Jump-pilot-devel mailing list >>>>>>> Jump-pilot-devel@lists.sourceforge.net >>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>>>> >>>>>>> >>>>>>> >>>>> ------------------------------------------------------------------------- >>>>> This SF.net email is sponsored by DB2 Express >>>>> Download DB2 Express C - the FREE version of DB2 express and take >>>>> control of your XML. No limits. Just data. Click to get it now. >>>>> http://sourceforge.net/powerbar/db2/ >>>>> _______________________________________________ >>>>> Jump-pilot-devel mailing list >>>>> Jump-pilot-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>> >>>> -- >>>> http://amusingprogrammer.blogspot.com/ >>>> >>> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> Jump-pilot-devel mailing list >> Jump-pilot-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >> > > ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel