我有一个需要调试的大量函数(1500 行代码)。我会尝试并最终将其分解,但可用的工具无法完成任务。
所以,与此同时,我需要的是能够禁用 DC 写入显示器的缓存,以便能够快速调试。我可以设置一些标志来完成此操作吗?
我这样做的方式:
您必须禁用双缓冲(使用 CMemDC)。
作为性能优化,GDI 执行批处理。当您要求 GDI 执行一个操作时,它并不总是立即执行它。相反,它将它存储在缓冲区中,一旦该缓冲区已满,批处理就会被刷新,并且操作会被发送到内核模式以执行。这是 GDI 默认所做的,通常没有理由更改这种操作模式。
有时,您需要控制 GDI 执行多少批处理或何时进行刷新,因为您正在渲染到屏幕外 DC 并且需要从内存中读回该信息,或者出于调试目的。
您可以使用 2 个 API 调用来控制批处理。要启动批量操作的刷新,您可以调用GdiFlush
. 一旦此 API 返回,您就可以保证所有 GDI 操作都已运行完成。如果要控制执行的批处理量,可以使用GdiSetBatchLimit
. 要完全禁用批处理,只需调用GdiSetBatchLimit(1)
.