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