MFC UpdateAllViews блокирует или не блокирует?

У меня есть код MFC, основанный на платформе Document View. Я использую UpdateAllViews (nullptr, 0, nullptr) из класса Document для вызова функции-члена View OnDraw.

void MyDocumentClass::MyFunction()
{
//.. Document code to create and process data
UpdateAllViews(nullptr,0,nullptr) // Invokes OnDraw
// When does program control reach this line?
}

Мой вопрос, пожалуйста, скажите мне, является ли функция UpdateAllViews блокирующей или неблокирующей, когда управление программой достигает линии рядом с UpdateAllViews ()? Достигнут ли он там после того, как весь код в OnDraw () завершил выполнение, или достигнет его раньше?

3

Решение

UpdateAllViews — это неблокирующая функция, которая просто вызывает OnUpdate каждого представления. Функция OnUpdate обычно делает недействительным представление, что позже вызовет OnDraw. UpdateAllViews возвращается после аннулирования и до рисования.

5

Другие решения

UpdateAllViews — это блокирующая функция, которая просто зацикливает каждое представление и вызывает их функцию OnUpdate. Это не «очередь на потом» и немедленно возвращает вызов как PostMessage.

Как и SendMessage, UpdateAllViews не возвращается, пока весь код в функции OnUpdate каждого представления не будет выполнен. Вот почему делать что-то тяжелое, например, напрямую вызывать OnDraw или блокировать ввод-вывод в UpdateAllViews / OnUpdate, обычно плохая идея. Рекомендуется аннулировать некоторые или все представления, основанные на параметрах подсказки, и позволить инфраструктуре вызывать OnDraw для следующего WM_PAINT.

1

По вопросам рекламы [email protected]