image/svg+xml UI Event Loop Thread CrossThreadChannel RT Thread Freeze Thread Step One:AbstractUI::get_request()AbstractUI::send_request() Generic non-RT-safe request queue RT-safe per-thread request queues while (1) if (channel.data_available()) { channel.drain(); handle_ui_requests(); } J. Random Thread Step Two:CrossThreadChannel::wakeup() AbstractUI IS-A BaseUI IS-A Event Loop