是MFC UpdateAllViews阻塞还是非阻塞
Is MFC UpdateAllViews blocking or non blocking?
我有一个基于文档视图框架的MFC代码。我使用Document类中的UpdateAllViews(nullptr,0,nullptr)来调用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函数是阻塞的还是非阻塞的,程序控制何时到达UpdateAllView()旁边的行?它是在OnDraw()中的所有代码执行完毕后到达那里,还是更快到达那里?
UpdateAllViews是一个阻塞函数,它只需循环每个视图并调用它们的OnUpdate函数。它不是像PostMessage那样"稍后排队"并立即返回调用。
与SendMessage一样,UpdateAllViews在每个视图的OnUpdate函数中的所有代码都执行完毕后才会返回。这就是为什么在UpdateAllViews/OnUpdate中直接调用OnDraw或阻止I/O之类的繁重工作通常是个坏主意。更好的做法是基于提示参数使部分或全部视图无效,并让框架在下一个WM_PAINT上调用OnDraw。
相关文章:
- C++ MFC Libraries in Travis CI
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 MFC 中显示文件的所有行
- 目录删除 MFC 的问题
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- MFC:如何设置CEdit框的焦点?
- MFC 中的抗锯齿
- NVCC 错误:string_view.h:constexpr 函数返回是非常量
- 编译器是否必须始终删除 try-catch 块(如果它被证明是非抛出的)
- 双击更改 mfc 中列表控件中的行的颜色
- C++MFC编辑框处理双击
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- C++ MFC CObject 派生类摘要?
- 如何在 MFC 对话框中使用 OnDraw
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- MFC:你能在CDateTimeCtrl中改变自旋的加速度吗?
- MFC:我们如何轻松地从CTreeCtrl切换到CTreeView?
- 是MFC UpdateAllViews阻塞还是非阻塞