所谓的消息嵌套,说白了,就类似函数递归。下面存在这样一种场景,会导致所谓的嵌套发生。
需要解决一种使用场景,例如主线程post一个任务到MessageLoop的队列中,然后调用MessageLoop::Run。
这是进入消息处理,而这个抛入的任务实际上做的也是调用MessageLoop::Run。
那这就陷入了2个问题
1,要么出现多次“嵌套”,直到最后一个待处理的任务被执行完,然后再逐级返回,以至于最后一个任务被处理完。
2,要么直接死循环或者说是饿死。因为有可能抛入的任务都是调用同一个线程的MessageLoop::Run,然后最后被处理的任务被停在了事件等待上面,这个事件是用于等待有新MessageLoop任务抛入的。
因此nestable_tasks_allowed_ 标记就成了关键,这个标记控制着不允许任务会被嵌套的情况发生。