1
billlee 2015-02-01 23:56:32 +08:00
阻塞在事件循环中
|
2
zgxltxz 2015-02-02 08:04:02 +08:00 via Android
主循环,MainLoop
|
3
shutupATnight 2015-02-02 20:32:15 +08:00
我理解的2种:
第一种: :死循环开始 键盘有输入么? 有:do_something() 回到循环开始 在这时候你的程序是死锁状态(根据操作系统的不同,会出现是你的程序完全使用CPU资源 or 会有部分 CPU 时间片被分配到其它任务上) 第二种: 我的程序.Init开始() call 操作系统.IO处理.如果有键盘输入时怎么办( 请调用下面的 on_keyboard_event ) 我的程序.Init结束 我的程序.on_keyboard_event开始() do_something() 我的程序.on_keyboard_event结束 简单来说 Init 函数被调用后,操作系统不会再给你的程序分配时间片。直到有键盘输入了,操作系统会调用 on_keyboard_event 函数通知你。你的程序没有被挂起,只是操作系统没有分配 CPU 去执行你的程序了。 当然实际情况会更复杂,因为可能你的图形界面上有需要定时刷新的东西,背后需要接受网络消息,你有一个一直在死循环的线程等。 |
4
shutupATnight 2015-02-02 20:32:34 +08:00
我是不是写的太多了?
|
5
krytor OP 其实我想问的就是 “简单来说 Init 函数被调用后,操作系统不会再给你的程序分配时间片” 不给分配时间片,程序是怎么做到的那,程序不是执行流吗,如果程序等待的话 就是mainloop 谢了 各位 @billlee @zgxltxz @shutupATnight
|
6
zgxltxz 2015-02-03 08:12:51 +08:00 via Android
程序运行,在底层除了快速按顺序执行CPU指令外,有两种方式触发事件,一个是轮询,一个是中断。 这个MainLoop就是不断轮询直到有新消息到达,去处理新消息后接着轮询。轮询是阻塞的,所以包含主循环的程序不会立刻退出,而是可以等待新事件。
会分配时间片,不分配的话是特殊的程序。 |