一、识别系统消息,并派出该消息

EventLoop(应用程序的事件循环),用于循环的从系统消息队列中获取系统消息(包含消息的各种参数:如鼠标位置,事件类型,鼠标左右键,哪个键盘键等),然后派发相应的事件给窗口进行处理。

二、继承自EventDispatcher

由于继承字EventDispatcher,所以可以添加自定义事件,并将某个对象作为它的事件处理对象(也叫Listener),对它派发的事件进行处理。如果派发的事件刚好是鼠标或键盘事件,这就能够让Listener获取鼠标的位置信息或键盘信息,这将是非常有用的。(如构建一个button对象就可以知道鼠标是不是点击在自己身上)。

三、唯一性

一个pyglet程序只能有一个EventLoop处于工作状态(即调用run()函数)

四、每一次事件循环所做的工作

一是从系统事件队列中获取与pyglet相关的系统事件,并派发;

二是调用idle()函数,该函数的作用包括:

1.调用clock.tick()函数运行那些预定函数(sheduled functions)

2.派出on_draw()事件,重绘每一个打开的窗口。

(个人理解是每一次事件循环,主要任务是处理系统事件,然后调用idle()函数,因为每次处理系统事件时都会调用idle,因此只要有用户事件,就调用idle,就会重绘所有窗口,

如果既没有系统事件也没有预定函数需要执行,则系统可能不会循环迭代)

五、event loop itaration真面目

while True:
pyglet.clock.tick()#启动clock对象,用于预定函数的执行 for window in pyglet.app.windows:#遍历每个打开的窗口
window.switch_to()
window.dispatch_events()#从系统事件队列中获取事件并派出
window.dispatch_event('on_draw')#重绘每个窗口
window.flip()#实现双缓冲机制
因此窗口是每时每刻都在重绘的

pyglet--EventLoop对象(主事件循环,用于从系统消息队列中取出消息,并派发给各个窗口)的更多相关文章

  1. Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和。先处理自己队列中的消息,然后再处理系统消息队列中的消息)

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  2. Glib之主事件循环

    介绍 GLib和GTK+应用的主事件循环管理着所有事件源.这些事件的来源有很多种比如文件描述符(文件.管道或套接字)或超时.新类型的事件源可以通过g_source_attach()函数添加. 为了让多 ...

  3. js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。

    JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...

  4. JavaScript 运行机制:Event事件循环机制

    JavaScript Event事件循环机制 JS是单线程的,浏览器只分配一个主线程给JS.一次只能执行一个任务,当前任务执行完后在可以执行下一个任务.任务多时,就会形成任务队列排队等待执行.但是非常 ...

  5. 事件循环Event Loop

    在 事件循环 期间的某个时刻,运行时会从最先进入队列的消息开始处理队列中的消息.被处理的消息会被移出队列,并作为输入参数来调用与之关联的函数.正如前面所提到的,调用一个函数总是会为其创造一个新的栈帧. ...

  6. Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  7. 深入理解JavaScript的事件循环(Event Loop)

    一.什么是事件循环 JS的代码执行是基于一种事件循环的机制,之所以称作事件循环,MDN给出的解释为 因为它经常被用于类似如下的方式来实现 while (queue.waitForMessage()) ...

  8. js事件循环

    之前有看过一些事件循环的博客,不过一阵子没看就发现自己忘光了,所以决定来自己写一个博客总结下! 首先,我们来解释下事件循环是个什么东西: 就我们所知,浏览器的js是单线程的,也就是说,在同一时刻,最多 ...

  9. js的事件循环机制和任务队列

    上篇讲异步的时候,提到了同步队列和异步队列的说法,其实只是一种形象的称呼,分别代表主线程中的任务和任务队列中的任务,那么此篇我们就来详细探讨这两者. 一.来张图感受一下 如果看完觉得一脸懵逼,请继续往 ...

随机推荐

  1. Lua string文件类型判断和内容解析

    [1]文件名称类型判断和解析 local fileName = "shanxi201904npsdr1_200000.zip" print("len : " . ...

  2. selenium驱动Firefox跳转页慢慢慢的问题(待验证)

    转载至http://www.cnblogs.com/yicaifeitian/p/5198871.html 为了解决这个问题,我是查了很多资料,解决方案是百度出来的.抱歉,我忘记出处在哪了,代码如下: ...

  3. 多媒体开发之--- live555 vs2010/vs2013下编译,使用,测试

    Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编 ...

  4. 自定义cginc文件

    首先定义一个cginc文件如下所示: #ifndef MY_CG_INCLUDE #define MY_CG_INCLUDE struct appdata_x { float4 vertex : PO ...

  5. iOS ARC也会有内存泄露

    本文转载至 http://blog.csdn.net/allison162004/article/details/38753219  iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用A ...

  6. Catalan数以及使用Raney引理证明

    一.Catalan数性质   1.1 令h(0)=1,h(1)=1,catalan数满足递推式:   h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) ...

  7. 【BZOJ4930】棋盘 拆边费用流

    [BZOJ4930]棋盘 Description 给定一个n×n的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置(x,y),(u,v)能互相攻击当前仅 当满足以下两个条件: 1:x=u或y ...

  8. ArcGIS Scalebar 比例尺 充满div

    说明:本篇博文地图充满div,上一篇博文是充满整个body 运行效果: 2.HTML代码 <!DOCTYPE html> <html> <head> <met ...

  9. 教你管理SQL数据库系列(1-4)

    原文 教你管理 SQL Server 数据库(1)数据库的结构  http://bbs.51cto.com/thread-1084951-1.html教你管理 SQL Server 数据库(2)系统数 ...

  10. pinpoint本地开发——collector

    本地启动collector 启动前准备 启动之前,要先确保本地已经可以正常package,install 必须保证install成功,才能进行后续步骤,无法install或者package参考[pin ...