您当前位置: 首页 » 编码技巧 » win » 编码技巧 » [chromium]MessageLoop控制所谓的“消息嵌套”问题

[chromium]MessageLoop控制所谓的“消息嵌套”问题

2013-06-04 |

所谓的消息嵌套,说白了,就类似函数递归。下面存在这样一种场景,会导致所谓的嵌套发生。

需要解决一种使用场景,例如主线程post一个任务到MessageLoop的队列中,然后调用MessageLoop::Run
这是进入消息处理,而这个抛入的任务实际上做的也是调用MessageLoop::Run
那这就陷入了2个问题
1,要么出现多次“嵌套”,直到最后一个待处理的任务被执行完,然后再逐级返回,以至于最后一个任务被处理完。
2,要么直接死循环或者说是饿死。因为有可能抛入的任务都是调用同一个线程的MessageLoop::Run,然后最后被处理的任务被停在了事件等待上面,这个事件是用于等待有新MessageLoop任务抛入的。

因此nestable_tasks_allowed_ 标记就成了关键,这个标记控制着不允许任务会被嵌套的情况发生。

分类:

win, 编码技巧

| 标签: