INF: Performing Background Processing Without Using Timers

ID Number: Q36324

3.00

WINDOWS

Summary:

A Windows application that performs a long, background task, such as

repaginating a word processing document, can be designed in a number

of different ways.

A polling task can be accomplished by setting a timer to fire at the

desired interval. Many nonpolling tasks can be performed in pieces.

Although Windows does not have a method to schedule processing based

on overall system load, an application can wait until there are no

other messages to be processed by that application before proceeding.

This article discusses the code required to implement this method.

More Information:

It is important that each piece of the task be relatively small. This

allows Windows to devote processing time to other applications running

in the system. Similarly, once the task is complete, it is important

that the application signal that it is idle. This allows Windows to

optimize its performance and to prolong battery life on portable

computers.

The following code skeleton demonstrates how this might be

implemented:

WinMain

{

do application initialization

fBackgroundToDo = TRUE;

fRunning = TRUE;

while (fBackgroundToDo && fRunning)

{

if (fBackgroundToDo)

{

if ((PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))

{

if (msg.message == WM_QUIT)

{

fRunning = FALSE;

break;

}

TranslateMessage(&msg);

DispatchMessage(&msg);

}

else

fBackgroundToDo = DoABitOfBackground();

}

else if ((fRunning = GetMessage(&msg, NULL, NULL, NULL)) != 0)

{

TranslateMessage(&msg);

DispatchMessage(&msg);

fBackgroundToDo = IsThereBackgroundToDo();

}

}

}

Additional reference words: 3.00