最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。
查询的资料如下:
原因: 最小化后渲染后端不受控制的运行,imgui 进行许多无用的渲染,EventsLoop不断的拉取无用事件。
解决办法: 检测到最小化后,让当前渲染线程的休眠一段时间,不要过快的执行。
impl System {
pub fn main_loop(self, mut run_ui: F) {
let System {
mut events_loop,
mut imgui,
mut platform,
mut render_sys,
..
} = self;
let mut encoder: gfx::Encoder<_ _> = render_sys.factory.create_command_buffer().into();
let mut last_frame = Instant::now();
let mut run = true;
let mut minimized = true;
while run {
events_loop.poll_events(|event| {
platform.handle_event(imgui.io_mut(), render_sys.window(), &event);
if let Event::WindowEvent { event, .. } = event {
match event {