我有一个基于文档视图框架的MFC代码。我使用文档类中的UpdateAllViews(nullptr,0,nullptr)调用视图的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()中的所有代码都已完成执行之后,它是到达了那里,还是更早到达了那里?
发布于 2014-08-25 21:25:54
UpdateAllViews是一个非阻塞函数,它简单地调用每个视图的OnUpdate。OnUpdate函数通常会使视图无效,这将导致稍后的OnDraw。UpdateAllViews在无效之后和绘画之前返回。
发布于 2015-01-24 02:28:27
UpdateAllViews是一个阻塞函数,它简单地循环每个视图并调用它们的OnUpdate函数。它不是“稍后的队列”,而是像PostMessage那样立即返回调用。
与SendMessage类似,在每个视图的OnUpdate函数中的所有代码都已执行之前,UpdateAllViews不会返回。这就是为什么在UpdateAllViews/OnUpdate中执行诸如直接调用OnDraw或阻塞I/O之类的沉重任务通常是个坏主意。更好的做法是根据提示参数使部分或全部视图失效,并让框架在下一个WM_PAINT上调用WM_PAINT。
https://stackoverflow.com/questions/25493504
复制相似问题