问题标签 [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.

0 投票
1 回答
226 浏览

opengl - GLUT:有什么方法可以在事件循环中添加“文件可读”挂钩?

我想打开一个套接字并在 GLUT 事件循环上挂起一个可读事件......关于如何做到这一点的任何想法?可移植的标准 GLUT 代码是最好的,但我也对特定于平台的 hack 持开放态度。

谢谢!

0 投票
6 回答
42037 浏览

c++ - 你将如何实现一个基本的事件循环?

如果您使用过 gui 工具包,您就会知道在一切完成后应该执行一个事件循环/主循环,这将使应用程序保持活跃并响应不同的事件。例如,对于 Qt,您可以在 main() 中执行此操作:

在这种情况下, app.exec() 是应用程序的主循环。

实现这种循环的明显方法是:

但这会将 CPU 限制为 100%,并且实际上毫无用处。现在,我怎样才能实现这样一个响应式的事件循环而不完全占用 CPU 呢?

答案在 Python 和/或 C++ 中表示赞赏。谢谢。

脚注:为了学习,我将实现自己的信号/槽,并使用它们来生成自定义事件(例如go_forward_event(steps))。但是,如果您知道我如何手动使用系统事件,我也想知道这一点。

0 投票
19 回答
324390 浏览

javascript - 为什么 setTimeout(fn, 0) 有时有用?

我最近遇到了一个相当讨厌的错误,其中代码是<select>通过 JavaScript 动态加载的。这个动态加载<select>的有一个预选值。在 IE6 中,我们已经有了修复 selected 的代码<option>,因为有时<select>' 的selectedIndex值会与 selected<option>index属性不同步,如下所示:

但是,此代码不起作用。即使该字段的selectedIndex设置正确,最终也会选择错误的索引。但是,如果我alert()在正确的时间插入一个语句,就会选择正确的选项。认为这可能是某种时间问题,我尝试了一些我之前在代码中看到的随机的东西:

这行得通!

我有一个解决我的问题的方法,但我很不安,因为我不知道为什么这能解决我的问题。有人有官方解释吗?通过使用“稍后”调用我的函数可以避免什么浏览器问题setTimeout()

0 投票
1 回答
1940 浏览

asp.net - ASP.Net 事件循环顺序

我遇到了很多问题(通常是在上一页的按钮单击事件之前执行页面加载事件),我决定查找它并发布事件循环排序:

0 投票
4 回答
12817 浏览

qt4 - 如何在 Qt4 或 GTK 等 GUI 框架中集成 Boost.Asio 主循环

有没有办法将 Boost.Asio 与 Qt4(首选)或 GTK 主循环集成?GTK 提供 poll(2) 之类的 API,所以技术上应该是可行的。Qt 提供了自己的网络层,但我更喜欢使用为 Boost.Asio 编写的现有代码。我想在使用额外线程的情况下集成它们。

有没有参考如何为 Qt4(首选)或 GTKmm 执行此操作?

谢谢。

编辑

我想澄清几件事以使答案更容易。Qt 和 GTKmm 都提供“选择喜欢”功能:

所以,问题是,如何将现有的“选择器/轮询器”作为反应器集成到 Boost.Asio io_service。今天,Boost.Asio 可以使用 select、kqueue、epoll、/dev/poll 和 iocp 作为 reactor/proactor 服务。我想将它集成到 GUI 框架的主循环中。

欢迎任何建议和解决方案(更好)。

0 投票
1 回答
1974 浏览

iphone - 自定义事件循环和 UIKit 控件。Apple 的事件循环有什么额外的魔力?

有谁知道或有很好的链接来解释 iPhone 的事件循环在幕后做什么?

我们在基于 OpenGL 的 iPhone 游戏框架中使用自定义事件循环。它调用我们的游戏渲染系统,调用 presentRenderbuffer 并使用 CFRunLoopRunInMode 泵送事件。有关详细信息,请参阅下面的代码。

当我们不使用 UIKit 控件时它工作得很好(作为证明,试试Facetap,我们第一个发布的游戏)。

然而,当使用 UIKit 控件时,几乎一切都可以正常工作,但并不完全正常。具体来说,UIKit 控件的滚动无法正常工作。

例如,让我们考虑以下场景。

  • 我们在自己的视图之上显示 UIImagePickerController。
  • UIImagePickerController 覆盖了我们的自定义视图
  • 我们也暂停了自己的渲染,但继续使用自定义事件循环。

如前所述,一切正常,除了滚动。

  • 挑选照片工作。
  • 深入到相册作品和过渡动画流畅。
  • 尝试滚动相册视图时,视图会跟随您的手指。

问题:滚动时,抬起手指后滚动立即停止。通常,它会根据您的移动速度平稳地继续,但当我们使用自定义事件循环时则不会。似乎 iPhone 的事件循环正在做一些我们自己没有实现的与 UIKit 滚动相关的魔法。

现在,通过使用 Apple 的事件循环并通过 NSTimer 回调调用我们自己的渲染,我们可以让 UIKit 控件与我们自己的系统一起正常工作。但是,我仍然想了解,在我们的自定义事件循环中未实现的 iPhone 事件循环中可能发生的事情。

0 投票
1 回答
667 浏览

python - 套接字服务器框架,如 Tcl "socket -server"

我正在寻找重新实现一些使用socket -server构造 [1] 的 Tcl 代码。

对于包含事件循环处理/集成的小型工业级多用户网络服务器,Python 中的最佳选择是什么?

[1] http://www.tcl.tk/man/tcl8.4/TclCmd/socket.htm

0 投票
2 回答
3765 浏览

qt - Qt/C++ 事件循环异常处理

我有一个严重基于 QT 和许多第三方库的应用程序。这些碰巧在几种情况下引发了一些异常。

在本机 Qt 应用程序中,这会导致应用程序中止或终止。通常主数据模型仍然完好无损,因为我将它保存在没有外部数据的纯 Qt 中。

所以我想我也可以通过告诉用户在这个过程中发生错误来恢复,他应该现在保存,甚至决定继续处理主模型。

目前该程序只是默默地退出,甚至没有讲故事。

0 投票
3 回答
3811 浏览

c++ - 异步事件循环设计和问题

我正在使用 epoll/devpoll/kqueue/poll/select(包括 windows-select)为异步套接字 IO 设计事件循环。

我有两个执行选项,IO 操作:

非阻塞模式,在 EAGAIN 上轮询

  1. 将套接字设置为非阻塞模式。
  2. 读/写到套接字。
  3. 如果操作成功,则将完成通知发布到事件循环。
  4. 如果我得到 EAGAIN,请将套接字添加到“选择列表”并轮询套接字。

轮询方式:轮询后执行

  1. 将套接字添加到选择列表并轮询它。
  2. 等待通知它可读可写
  3. 读/写
  4. 将完成通知发布到成功的事件循环

在我看来,在正常模式下使用时首先需要更少的系统调用,尤其是写入套接字(缓冲区非常大)。此外,看起来有可能减少“选择”执行次数的开销,特别是当您没有像 epoll/devpoll/kqueue 那样可扩展的东西时,这很好。

问题:

  • 第二种方法有什么优点吗?
  • 在众多操作系统上对套接字/文件描述符进行非阻塞操作是否存在任何可移植性问题:Linux、FreeBSD、Solaris、MacOSX、Windows。

注意:请不要建议使用现有的 event-loop/socket-api 实现

0 投票
3 回答
626 浏览

ajax - 为什么你需要一个异步请求的事件循环(例如,AJAX 长轮询)

我知道使用普通的线程网络服务器(例如 Apache)进行 AJAX 长轮询被认为是糟糕的设计……但我真的不明白为什么。

是不是因为每个长轮询请求比正常请求花费的时间要多得多(从而占用了处理器)?如果是这样的话,线程真的会占用那么多开销,以至于它们在使用前不能保持空闲一段时间吗?