问题标签 [event-loop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - GLUT:有什么方法可以在事件循环中添加“文件可读”挂钩?
我想打开一个套接字并在 GLUT 事件循环上挂起一个可读事件......关于如何做到这一点的任何想法?可移植的标准 GLUT 代码是最好的,但我也对特定于平台的 hack 持开放态度。
谢谢!
c++ - 你将如何实现一个基本的事件循环?
如果您使用过 gui 工具包,您就会知道在一切完成后应该执行一个事件循环/主循环,这将使应用程序保持活跃并响应不同的事件。例如,对于 Qt,您可以在 main() 中执行此操作:
在这种情况下, app.exec() 是应用程序的主循环。
实现这种循环的明显方法是:
但这会将 CPU 限制为 100%,并且实际上毫无用处。现在,我怎样才能实现这样一个响应式的事件循环而不完全占用 CPU 呢?
答案在 Python 和/或 C++ 中表示赞赏。谢谢。
脚注:为了学习,我将实现自己的信号/槽,并使用它们来生成自定义事件(例如go_forward_event(steps)
)。但是,如果您知道我如何手动使用系统事件,我也想知道这一点。
javascript - 为什么 setTimeout(fn, 0) 有时有用?
我最近遇到了一个相当讨厌的错误,其中代码是<select>
通过 JavaScript 动态加载的。这个动态加载<select>
的有一个预选值。在 IE6 中,我们已经有了修复 selected 的代码<option>
,因为有时<select>
' 的selectedIndex
值会与 selected<option>
的index
属性不同步,如下所示:
但是,此代码不起作用。即使该字段的selectedIndex
设置正确,最终也会选择错误的索引。但是,如果我alert()
在正确的时间插入一个语句,就会选择正确的选项。认为这可能是某种时间问题,我尝试了一些我之前在代码中看到的随机的东西:
这行得通!
我有一个解决我的问题的方法,但我很不安,因为我不知道为什么这能解决我的问题。有人有官方解释吗?通过使用“稍后”调用我的函数可以避免什么浏览器问题setTimeout()
?
asp.net - ASP.Net 事件循环顺序
我遇到了很多问题(通常是在上一页的按钮单击事件之前执行页面加载事件),我决定查找它并发布事件循环排序:
qt4 - 如何在 Qt4 或 GTK 等 GUI 框架中集成 Boost.Asio 主循环
有没有办法将 Boost.Asio 与 Qt4(首选)或 GTK 主循环集成?GTK 提供 poll(2) 之类的 API,所以技术上应该是可行的。Qt 提供了自己的网络层,但我更喜欢使用为 Boost.Asio 编写的现有代码。我想在不使用额外线程的情况下集成它们。
有没有参考如何为 Qt4(首选)或 GTKmm 执行此操作?
谢谢。
编辑
我想澄清几件事以使答案更容易。Qt 和 GTKmm 都提供“选择喜欢”功能:
- http://qt-project.org/doc/qt-5.0/qtcore/qsocketnotifier.html
- http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__MainLoop.html
所以,问题是,如何将现有的“选择器/轮询器”作为反应器集成到 Boost.Asio io_service
。今天,Boost.Asio 可以使用 select、kqueue、epoll、/dev/poll 和 iocp 作为 reactor/proactor 服务。我想将它集成到 GUI 框架的主循环中。
欢迎任何建议和解决方案(更好)。
iphone - 自定义事件循环和 UIKit 控件。Apple 的事件循环有什么额外的魔力?
有谁知道或有很好的链接来解释 iPhone 的事件循环在幕后做什么?
我们在基于 OpenGL 的 iPhone 游戏框架中使用自定义事件循环。它调用我们的游戏渲染系统,调用 presentRenderbuffer 并使用 CFRunLoopRunInMode 泵送事件。有关详细信息,请参阅下面的代码。
当我们不使用 UIKit 控件时它工作得很好(作为证明,试试Facetap,我们第一个发布的游戏)。
然而,当使用 UIKit 控件时,几乎一切都可以正常工作,但并不完全正常。具体来说,UIKit 控件的滚动无法正常工作。
例如,让我们考虑以下场景。
- 我们在自己的视图之上显示 UIImagePickerController。
- UIImagePickerController 覆盖了我们的自定义视图
- 我们也暂停了自己的渲染,但继续使用自定义事件循环。
如前所述,一切正常,除了滚动。
- 挑选照片工作。
- 深入到相册作品和过渡动画很流畅。
- 尝试滚动相册视图时,视图会跟随您的手指。
问题:滚动时,抬起手指后滚动立即停止。通常,它会根据您的移动速度平稳地继续,但当我们使用自定义事件循环时则不会。似乎 iPhone 的事件循环正在做一些我们自己没有实现的与 UIKit 滚动相关的魔法。
现在,通过使用 Apple 的事件循环并通过 NSTimer 回调调用我们自己的渲染,我们可以让 UIKit 控件与我们自己的系统一起正常工作。但是,我仍然想了解,在我们的自定义事件循环中未实现的 iPhone 事件循环中可能发生的事情。
python - 套接字服务器框架,如 Tcl "socket -server"
我正在寻找重新实现一些使用socket -server
构造 [1] 的 Tcl 代码。
对于包含事件循环处理/集成的小型工业级多用户网络服务器,Python 中的最佳选择是什么?
qt - Qt/C++ 事件循环异常处理
我有一个严重基于 QT 和许多第三方库的应用程序。这些碰巧在几种情况下引发了一些异常。
在本机 Qt 应用程序中,这会导致应用程序中止或终止。通常主数据模型仍然完好无损,因为我将它保存在没有外部数据的纯 Qt 中。
所以我想我也可以通过告诉用户在这个过程中发生错误来恢复,他应该现在保存,甚至决定继续处理主模型。
目前该程序只是默默地退出,甚至没有讲故事。
c++ - 异步事件循环设计和问题
我正在使用 epoll/devpoll/kqueue/poll/select(包括 windows-select)为异步套接字 IO 设计事件循环。
我有两个执行选项,IO 操作:
非阻塞模式,在 EAGAIN 上轮询
- 将套接字设置为非阻塞模式。
- 读/写到套接字。
- 如果操作成功,则将完成通知发布到事件循环。
- 如果我得到 EAGAIN,请将套接字添加到“选择列表”并轮询套接字。
轮询方式:轮询后执行
- 将套接字添加到选择列表并轮询它。
- 等待通知它可读可写
- 读/写
- 将完成通知发布到成功的事件循环
在我看来,在正常模式下使用时首先需要更少的系统调用,尤其是写入套接字(缓冲区非常大)。此外,看起来有可能减少“选择”执行次数的开销,特别是当您没有像 epoll/devpoll/kqueue 那样可扩展的东西时,这很好。
问题:
- 第二种方法有什么优点吗?
- 在众多操作系统上对套接字/文件描述符进行非阻塞操作是否存在任何可移植性问题:Linux、FreeBSD、Solaris、MacOSX、Windows。
注意:请不要建议使用现有的 event-loop/socket-api 实现
ajax - 为什么你需要一个异步请求的事件循环(例如,AJAX 长轮询)
我知道使用普通的线程网络服务器(例如 Apache)进行 AJAX 长轮询被认为是糟糕的设计……但我真的不明白为什么。
是不是因为每个长轮询请求比正常请求花费的时间要多得多(从而占用了处理器)?如果是这样的话,线程真的会占用那么多开销,以至于它们在使用前不能保持空闲一段时间吗?