最佳绘画方法
Best Drawing approach
我在wxWidgets中开发了一个应用程序,其中我使用位图进行绘图。所以当我的应用程序第一次启动时,它从文件中读取坐标并相应地绘制线条。应用程序还接收来自网络的UDP数据包,UDP数据包还包含一些必须在屏幕上绘制的xy坐标信息,所以当收到数据包时,我重新绘制位图图像,并显示在屏幕上,我还需要刷新位图鼠标移动事件,因为在鼠标移动时有一些新的绘图,我必须在屏幕上绘制。
所有这些都增加了操作成本并减慢了我的GUI。所以请建议我一些你认为在这种情况下可能有效的替代绘画方法。
我在谷歌上搜索了一下,得到了OpenGL的选项,但由于时间紧迫,我不想使用OpenGL,因为我没有任何OpenGL的经验。
听起来好像您的问题是GUI对用户输入没有响应,因为应用程序正忙于重新绘制显示。对于这类问题,一般有两种解决方法。
-
使用工作线程在内存中绘制位图。在此过程中,主线程可以继续与用户交互。一旦重新绘制了位图,工作线程就会向主线程发出信号,主线程就会将完成的位图复制到屏幕上——这是非常快的。
-
使用主线程直接将位图绘制到屏幕上,但是在绘制代码中调用wxApp::Yield()。这将允许GUI在漫长的绘图过程中保持对用户的响应。
选项1是"最好的",特别是在多核机器上运行时,但是保持两个线程同步并防止它们之间的争用是一个挑战,除非您具有多线程设计的丰富经验。选项2要简单得多,不过您仍然需要注意,用户交互不会在第一个绘图过程完成之前启动另一个绘图过程。
保存数据以绘制而不是总是刷新位图,并让主循环不时刷新位图。
这样你可以使程序永远不会崩溃。不利的一面当然是反应性会降低(即。当数据出现时,它将在20毫秒后才会显示在屏幕上,而不是立即显示。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 最佳绘画方法