Программирование для Windows NT

Функция задачи ThreadRoutine


Задача ThreadRoutine запускается для каждого вновь создаваемого дочернего MDI-окна. Ее функция получает один параметр - идентификатор этого дочернего окна, который необходим для выполнения рисования. Другие параметры, нужные для работы функции задачи ThreadRoutine, извлекаются из структуры типа CHILD_WINDOW_TAG. В свою очередь, адрес этой структуры извлекается из памяти окна перед началом цикла рисования:

lpMyWndTag = (LPCHILD_WINDOW_TAG)GetWindowLong(hwnd,

  GWL_USERDATA);

Бесконечный цикл, в котором работает задача, прерывается в том случае, если признак активности задачи не равен единице:

if(!lpMyWndTag->fActive)

  break;

В цикле задача выполняет рисование эллипса случайной формы и расположения. Перед получением контекста отображения задача входит в критическую секцию, которая находится в структуре CHILD_WINDOW_TAG. После выполенния рисования задача освобождает контекст отображения, выходит из критической секции и выполняет небольшую задержку.

После прерывания цикла функция задачи удаляет ненужную более критическую секцию и освобождает память, заказанную для структуры CHILD_WINDOW_TAG функцией malloc:

DeleteCriticalSection(&(lpMyWndTag->csChildWindowPaint));

free(lpMyWndTag);

Затем задача завершает свое выполнение с помощью оператора return.



Содержание раздела