问题标签 [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 投票
2 回答
2727 浏览

python - ZeroMQ Poller vs Tornados EventLoop

设计明智和性能明智,建议使用哪种方法来处理多个 Zeromq 套接字,为什么?

ZeroMQ 使用的 Tornado 的 IOLoop 占用的 CPU 是否比 while 循环中用于处理多个套接字的轮询器占用的 CPU 少?

0 投票
1 回答
307 浏览

javascript - js 事件循环是否意味着您可以将全局变量用于临时暂存空间?

* 免责声明:我并不是说这是一个好主意——事实上我会明确地说它不是——所以通过尝试理解事件循环对编码风格的确切含义来回答这个问题。

我对 javascript-has-no-threads 口头禅的基本理解是,运行时将所有 javascript 视为短的“代码块”,它们被安排在一个接一个地执行,而在执行过程中不会从一个块转移。在这种情况下,一段代码(我不知道真正的术语)基本上是由于触发事件处理程序而运行的代码。

如果我的理解是正确的,那意味着如果您对全局变量的使用不跨越一个以上的“代码块”,那么从技术上讲,使用全局变量是 100% 安全的。

因此,例如,如果我有一个全局对象window.workspace,我可以让我的事件处理程序和任何从那里流出的代码——而不是将临时变量存储在闭包中——将它们全部存储在window.workspace. 只要我不假设工作区在调用事件处理程序(即使是同一个)之间保留任何状态,这应该是完全安全的。

这是准确的(虽然,再一次,不建议)

0 投票
1 回答
276 浏览

node.js - 从逻辑上讲,线程中的事件循环是什么?

我遇到了node.js和.python's tornadoApache

他们说 :

  • Apache 为每个连接创建一个线程。
  • Node.js&tornado实际上在线程上进行事件循环,单个线程可以处理许多连接。

我不明白逻辑上什么是线程的孩子。在计算机科学术语中:

  • 进程具有隔离内存并与上下文切换共享 CPU。
  • 线程划分一个进程。
  • 因此,一个具有多个控制点的进程是由多个线程来实现的。

现在,

event loop在线程下如何工作?

它如何在一个线程的 1 控制下处理不同的连接?

更新 :

我的意思是如果在 1 个线程下与 3 个套接字进行通信,那么 1 个线程如何在不让任何人等待的情况下与 3 个套接字进行通信?

0 投票
2 回答
789 浏览

objective-c - 理解 Objective-C 事件循环

如何记录在 Objective-C 事件循环的单次迭代中发送的每条消息?

我想进一步了解 Objective-C 运行时,并认为这将是一个好的开始。

0 投票
3 回答
1396 浏览

multithreading - 使用 tkinter + pyhook 时冻结。两个事件循环和多线程

我正在 python 2.7 中编写一个工具来记录用户按下键盘或鼠标按钮的次数。点击量将显示在屏幕左上角的一个小黑框内。即使另一个应用程序处于活动状态,该程序也会记录点击次数。

它工作正常,除非我将鼠标移到框上。然后鼠标冻结几秒钟,然后程序再次运行。如果我再次将鼠标移到框上,鼠标会再次冻结,但这一次程序崩溃。

我试过注释掉 pumpMessages() 然后程序就可以工作了。这个问题看起来很像这个问题pyhook+tkinter=crash,但没有给出解决方案。

其他答案表明,在 python 2.6 中同时使用 wx 和 pyhook 时,dll 文件存在错误。我不知道这是否相关。

我自己的想法是,这可能与并行运行的两个事件循环有关。我已经读过 tkinter 不是线程安全的,但是我看不到如何使该程序在单个线程中运行,因为我需要同时运行 pumpmessages() 和 mainloop()。

总结一下:为什么我的程序在鼠标悬停时冻结?

0 投票
2 回答
2652 浏览

c++ - Qt - 如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口

我正在开发一个使用 QGLWidget 作为前端的基于 OpenGL 的游戏。但是由于所有不必要的开销(加上必须分发沉重的 QT 库!)我计划迁移到 GLUT,并且在大飞跃之前正在用更标准的替代品替换“Qt-stuff”。

为了替换控制帧速率和 fps 计时器的 QTimers,我试图将这些函数楔入一个简单的循环中,以替换 app.exec() 调用,如下所示:

到目前为止,它在运行时运行良好,但是一旦您尝试关闭窗口(通过系统“X”按钮),窗口就会消失,但程序会在后台挂起。问题是我找不到指示已调用 exit() 或 close() 的静态标志或查询函数。 bool closingDown()似乎总是错误的,我尝试在~MainWindow析构函数中切换一个静态标志并检测到它,但这也不起作用,因为直到main结束才会调用它。我知道我可能可以通过绑定 QApps 的aboutToQuit()信号来做到这一点,或者可能从 Qapp 创建一个派生类并拦截它,但这违背了远离信号/插槽的目的。有没有一种简单的方法可以从课堂外判断 QApplication 是否已被命令关闭?

0 投票
4 回答
662 浏览

perl - Perl 和 X Window 中没有事件循环图形?

在 1980 年代的 Apple II BASIC 上,您将使用“HGR”来访问屏幕,“HCOLOR”将设置颜色,而“HPLOT”将绘制点。您还可以操作屏幕字节数据,而不必将程序控制权交给任何事件处理程序。今天,每种语言和每个库似乎都缺少这种可笑的基本功能。

因此,我使用X Window API在 C 中编写了一个小型库来执行此操作:HGR(x,y) 建立一个 XWindow,HCOLOR(i) 设置颜色,HPLOT(i,j) 绘制一个点,再加上你提取窗口的位图,可以修改它并显示修改后的东西。这并不简单,我不想再经历一次。

我现在正在使用 Perl 做一些事情,我需要这样一个用于 Perl 的工具,您可以在其中调用一个子例程,该子例程最好在不产生新线程的情况下返回,并输出一个窗口,您可以在其中向窗口添加图形内容,并且当您的程序喜欢它时查询事件。这是 1980 年代 BASIC 的功能,所以应该不难。但是我看到的工具没有做到这一点:

  • GD:据我所知,这是生成图形文件,而不是图形窗口。看来您需要将其通过管道传输到另一个程序。
  • Gtk2:我必须分叉出一个单独的线程来捕获事件,否则它不会显示窗口。我不想分叉任何东西,而且我基本上不关心任何事件,除非我特别要求稍后查看堆积在队列中的东西。
  • Qt:在这里,您还需要将控制权移交给事件处理程序,不移交,不显示。在 C++ 版本中,我可以让 Qt 显示和绘制而无需切换。
  • PerlTk:又是愚蠢的交接。
  • OpenGL:在这里,当我想看看发生了什么时,我不知道如何捕捉 X Window 事件,比如按键。

有谁知道如何从正在运行的应用程序中建立一个 XWindow,而无需分叉 GUI 应用程序进程,您可以在窗口中绘制原始的东西,如点和线,以及您可以根据自己的时间表查询窗口的事件?我简要地查看了 Perl 的 X Window API,它和 C 一样可怕,并且将 C 代码与 Perl 接口也是可怕的。如果有必要,我会做的。但也许不是。Perl 已经有 HGR 了吗?

如果您想知道我的意思是什么,没有事件循环图形库,请参阅这个链接的论文,不幸的是它是针对 C 的。这样的东西对于科学知识非常有用,除了介绍性编程课程之外。

0 投票
2 回答
1442 浏览

python - GTK 主要块——Python

我是 GTK 的新手,偶然发现了一个听起来很简单的问题,但我就是找不到解决方法。基本上,调用gtk.main()会使我的单线程进程停止。我知道这gtk.main()是阻塞的,但我之前没有打电话gtk.main(),所以退出主循环不会有任何好处,因为没有循环可以退出。

即便如此,返回 0。此外,当我从 python 命令行gtk.main_level()尝试时,它也会挂起。gtk.main()我缺少一些基本的东西,所以有人可以指出我吗?赞赏。

编辑:我需要的 Gtk 方法是gobject.add_timeout,像这样:

0 投票
1 回答
189 浏览

java - 什么是 JavaScript 事件循环,它与 GWT 有什么关系?

我正在阅读开发 GWT 应用程序并阅读此页面的摘录:

任何脚本如果在超过 10 秒左右没有将控制权返回给 JavaScript 主事件循环的情况下运行,则存在浏览器向用户弹出此对话框的风险......

这个JavaScript 主事件循环是 JS 构造、GWT 构造还是特定于浏览器的东西?它与客户端 GWT 应用程序有何关系?提前致谢!

0 投票
1 回答
8988 浏览

python - Python 中的基本事件循环

可能重复:
Python 3 的事件循环实现?

我正在尝试在 python2.7 中实现事件循环。我希望能够根据时间事件触发事件,并作为另一个动作发生的结果。

我知道我可以利用select做类似的事情。

这是正确的前进方式还是我错过了更好的方式?