Not Responding – Unresponsive Window Detection & Prevention
John Fauss
CODE AUTHOR
Posts: 8
John Fauss created the code: Not Responding – Unresponsive Window Detection & Prevention
Not Responding is a single-window application developed in PB 2017 which shows how to test for and prevent a window that is executing a long-running process (a process lasting five seconds or longer) from being “ghosted” by Windows for being unresponsive.
Any window that does not process queued event messages from the thread’s message queue within five seconds is considered by Windows to be “unresponsive”. This is typically due to either (1) the window executing a long-running process, or (2) the window waiting for a response from an external source, such as the completion of a database query. The Windows Desktop Manager (WDM) task automatically hides an unresponsive window, replacing it with a “ghost” window that mimics the appearance of the unresponsive window, while appending “(Not Responding)” to the window’s caption/title. The user is able to interact with the ghost window in a limited manner and can close it, which terminates the unresponsive application.
When long wait times are the cause of unresponsiveness, the best approach to prevention is multi-threading. While multi-threading is possible in PowerBuilder, it is an advanced topic not demonstrated here. There are coding techniques that can detect and/or prevent unresponsiveness caused by long-running processes, however.
This application can execute a configurable, long-running process. The app illustrates:
[br]
Any window that does not process queued event messages from the thread’s message queue within five seconds is considered by Windows to be “unresponsive”. This is typically due to either (1) the window executing a long-running process, or (2) the window waiting for a response from an external source, such as the completion of a database query. The Windows Desktop Manager (WDM) task automatically hides an unresponsive window, replacing it with a “ghost” window that mimics the appearance of the unresponsive window, while appending “(Not Responding)” to the window’s caption/title. The user is able to interact with the ghost window in a limited manner and can close it, which terminates the unresponsive application.
When long wait times are the cause of unresponsiveness, the best approach to prevention is multi-threading. While multi-threading is possible in PowerBuilder, it is an advanced topic not demonstrated here. There are coding techniques that can detect and/or prevent unresponsiveness caused by long-running processes, however.
This application can execute a configurable, long-running process. The app illustrates:
[br]
- How to detect and recover from unresponsiveness caused by a long-running process.
[li]How to prevent unresponsiveness caused by a long-running process.
This message has an attachment file.
Please log in or register to see it.
Please Log in or Create an account to join the conversation.