The OS/2 operating system uses VioSavRedrawWait to notify a graphics-mode application to save or restore its screen image at screen switch time. The application in the outgoing foreground session is notified to perform a save. The application in the incoming foreground session is notified to perform a restore. The application must perform the action requested and immediately reissue VioSavRedrawWait. When an application performs a save, it saves its physical display buffer, video mode, and any other information the application needs to completely redraw its screen at restore time.
Only one process per session can issue VioSavRedrawWait. The process that first issues it becomes the owner of the function.
A text-mode application must issue VioSavRedrawWait only if the application writes directly to the registers on the display adapter. Assuming VioSavRedrawWait is not issued by a text-mode application, the OS/2 operating system performs the required saves and restores.
An application that issues VioSavRedrawWait might also need to issue VioModeWait. This would allow the application to be notified when it must restore its mode at the completion of an application or hard-error pop-up. See VioModeWait for more information. Two application threads would be required to perform these operations, in this case.
At the time a VioSavRedrawWait thread is notified, the session is in transition to or from the background. Although the session's official status is background, any selector to the physical display buffer previously obtained by the VioSavRedrawWait process (through VioGetPhysBuf) is valid, at this time. The physical display buffer must be accessed without issuing VioScrLock. Because the session's official status is background, any thread waits if it issues VioScrLock with the "wait if unsuccessful" option.
An application containing a VioSavRedrawWait thread should be designed so that the process does not cause any hard errors while the VioSavRedrawWait thread is running; otherwise, a system lockout might occur.
An application's VioSavRedrawWait thread might be notified to perform a restore before it is notified to perform a save. This happens if the application was running in the background the first time it issued VioSavRedrawWait. The return from this function call provides the notification. The thread that issues the call performs the save or redraw and then reissues VioSavRedrawWait to wait until its screen image must be saved or redrawn again.