GUI programs process messages in a message loop. The message loop is usually the last three lines in the entry function of GUI programs. In fact, the entry function of most GUI programs are almost identical to the following example:
FUNCTION Entry ()
IF entered THEN RETURN
entered = $$TRUE
Xui() ' initialize GuiDesigner
InitGui() ' initialize message variables
InitProgram() ' initialize this program
CreateWindows() ' create program windows
InitWindows() ' initialize windows
IF LIBRARY(0) THEN RETURN ' libraries don't execute message loop
DO ' begin the message loop ...
XgrProcessMessages ( 1 ) ' process one message ...
LOOP UNTIL terminateProgram ' repeat until program is terminated
Entry() initializes GuiDesigner and itself, then creates, activates, and displays its main window. Finally it falls into its message loop, where it stays until the program is terminated.
The message loop is the "base of operations" for GUI programs. Until the user operates the keyboard or mouse, programs sleep in XgrProcessMessages(1). Computer time is given to other programs that have work to do.
When the user finally gets around to operating the GUI, GraphicsDesigner creates a message, puts it in the queue, and wakes up XgrProcessMessages(1) .
XgrProcessMessages(1) processes a message, then LOOP loops back to XgrProcessMessages(1) , where it awaits the next message.
Only when your program assigns a non-zero value to shared variable terminateProgram does the message loop end, usually followed by the entry function and the program.
But how does XgrProcessMessages(1) "process a message"?
What does it mean, to "process a message"?