[vtk-developers] window going blank...

Lisa Avila lisa.avila at kitware.com
Tue Oct 7 11:33:12 EDT 2008


The question is - is there any way to stop Windows from thinking the 
application is "not responding". This is an easy example to convert 
because we are looping over doing a lot of fast things. But what if each 
iteration of the loop takes 10 seconds - a really complex filter 
pipeline applied to large data for example. One Update path through the 
filter pipeline might take minutes - does that always need to be done in 
a background thread to keep Windows from complaining?

Lisa


David Cole wrote:
> The problem is that you are not processing/dispatching any Windows 
> messages in your tight loop, you are just rendering over and over 
> again. Windows sees an application that is not processing any messages 
> as "not responding"... Vista is more sensitive to it because end users 
> keep getting more demanding.
>
> A better way to achieve nearly the same result would be to set up a 
> repeating timer that does one iteration of your animation each time it 
> fires and then call Start on the render window interactor to start up 
> a message loop, thereby processing timer messages.
>
> If you decide in your timer callback that you are done and want to pop 
> out of the message loop, simply call ExitCallback on the interactor. 
> (See TestInteractorTimers.cxx for an example of quitting from a timer.)
>
>
> HTH,
> David
>
>
> On Fri, Sep 26, 2008 at 5:15 PM, Lisa Avila <lisa.avila at kitware.com 
> <mailto:lisa.avila at kitware.com>> wrote:
>
>
>     One other clue that this is Windows related - the top bar of the
>     window does change to "Not Responding..." when this blanking occurs.
>
>     So my best guess is that something causes a message to go to the
>     process (some random thing popping up, getting focus, or changing
>     on the screen) and if the process does not respond in a set amount
>     of time then Windows stops bothering to display the contents of
>     that process' windows. Any Windows experts out there know what it
>     is we have to respond to? We can throw in a timer event and check
>     the queue every so often (assuming we have some ability to view
>     the queue and not just blindly process it), but we can't really
>     process messages off this cue (other than WM_ERASEBKGRND because
>     we don't actually do anything but return TRUE on that one). I
>     don't know if we can selectively pull messages off the cue or if
>     we have to process all of them. I suppose we can go into a "don't
>     really process mode" and save the queue of events into our own
>     queue to process later...
>
>     Still looking for ideas....  :-)
>
>     Lisa
>
>
>
>     Lisa Avila wrote:
>
>
>         I have a nice brand new desktop with 64 bit Vista. An issue
>         that has been a minor problem for years is now more of a major
>         problem. Here is the basic concept:
>
>         set up a pipeline to view the first image in an animation series
>
>         while ( !done )
>          {
>          change the reader input to the next image
>          renWin->Render();
>          }
>
>         Previously on my 32bit XP system this worked for a while
>         (where "a while" was something on the order of a minute).
>         After that the window would just go to white or black, and
>         would return only after the animation was done. Now on my 64
>         bit Vista machine, "a while" has become much shorter
>         (sometimes just a second or two). In either case, if you cause
>         another window to be active, or anything else pops up on the
>         screen (like those little alert bubbles that pop up from the
>         bottom bar) then you immediately lose the image. Perhaps the
>         difference is that more of that is now happening in Vista and
>         that is why I often only get a second or two of rendering
>         before losing the image (although occasionally I will get 10
>         seconds or more...)
>
>         Is there a way to fix this? It should be valid to render in a
>         loop and expect to see the results indefinitely, right? Or is
>         that just not possible any more from raw C++ on Windows?
>
>         Sebastien sent me a link to
>         http://www.opengl.org/pipeline/article/vol003_7/ which has
>         some of the pitfalls that might cause this - but I can't see
>         anything we are doing in my simple example that would case
>         this (there is no intermixed GDI which I think we only use for
>         some instances of off screen rendering, we do return TRUE for
>         WM_ERASEBKGRND, etc.)
>
>         Any ideas?
>
>         Lisa
>
>
>     _______________________________________________
>     vtk-developers mailing list
>     vtk-developers at vtk.org <mailto:vtk-developers at vtk.org>
>     http://www.vtk.org/mailman/listinfo/vtk-developers
>
>



More information about the vtk-developers mailing list