问题标签 [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.
java - Java Swing 应用程序意外终止
我正在尝试用 Java 编写一个还运行 Google AppEngine Dev-Server 的 Swing 应用程序(请参阅开发使用 AppEngine 数据库的 Java 应用程序)并且遇到了 Swing Eventloop 的一个奇怪问题。
我有以下两个课程:
调试窗口,最终将接收日志消息等:
加载 Google AppEngine Dev-Server 的辅助类:
我的main(...)
方法如下所示:
有了这个,我得到了一些关于 Swing Eventloop 的非常奇怪的行为:
- 首先,Swing 应该工作的方式:如果我注释掉 中的行
DevServer.launch(...)
,main(...)
应用程序就会启动,显示调试窗口,继续运行,当我关闭调试窗口时,它会关闭。 - 如果我
DevServer.launch(...)
重新添加,它会按预期启动服务器,然后立即退出(它可能还短暂地显示了调试窗口,但它太快看到了)。 - 如果我
DevServer.launch(...)
在 之后移动行SwingUtilities.invokeLater(...)
,它会显示调试窗口,然后启动服务器,当服务器启动时,它会立即退出。 - 现在它变得非常奇怪:如果我将行更改为
DevServer.launch(args, false)
,即我不等待服务器实际启动,而只是让我的main(...)
方法立即完成,调试窗口显示,服务器正确加载,应用程序继续运行,但是如果我关闭调试窗口不会退出?! - 如果我随后也更改
JFrame.DISPOSE_ON_CLOSE
为JFrame.EXIT_ON_CLOSE
,则显示调试窗口,服务器加载正确,应用程序继续运行,如果我关闭调试窗口,它会正确退出。
知道 Swing 事件循环在这里发生了什么吗?我被难住了......是否有什么事情会导致 Swing 事件循环提前终止(场景 2 和 3)?多线程应用程序是否会阻止 Swing 检测到最后释放的窗口(场景 4)?
data-structures - CPU获取/执行周期是:“事件循环”
我正在阅读有关传递消息的事件循环,因为我必须为我正在从事的项目设计一个。为了更好地理解它,我试图将它类比为我更了解的其他事物,以帮助我理解。CPU 的获取/执行周期是否与事件循环软件结构相当?如果不是,主要区别是什么(当然,除了直接存储在硬件中)。谢谢你。
javascript - 在 Node.js 中等待异步函数返回
假设,我在 Node.js 中有一个异步函数,基本上是这样的:
现在我当然可以以异步方式调用这个函数:
我想知道的是您是否可以以某种方式同步调用此函数。为此,我想要一个包装函数sync
,它基本上做了以下事情:
然后,我可以addAsync
通过这种方式调用它来同步运行:
注意:当然你不会在现实中使用params[0]
and ,而是相应地使用数组,但我想在这个例子中保持简单。params[1]
arguments
现在,问题是,上面的代码不起作用。它只是阻塞,因为while
循环阻塞并且不释放事件循环。
我的问题是:是否有可能以任何方式使该示例按预期运行?
我已经尝试过setImmediate
和process.nextTick
其他各种东西,但没有一个有帮助。基本上,您需要一种方法来告诉 Node.js 请暂停当前函数,继续运行事件循环,并在稍后的时间点返回。
我知道你可以实现类似的 usingyield
和 generator 功能,至少在 Node.js 0.11.2 及更高版本中。但是,我很好奇即使没有它是否也有效?
请注意,我完全了解如何在 Node.js 中进行异步编程、事件循环和所有相关内容。我也完全意识到编写这样的代码是一个坏主意,尤其是在 Node.js 中。而且我也完全意识到“主动等待”也是一个愚蠢的想法。所以请不要建议学习如何异步执行或类似的操作。我知道。
我问的原因只是出于好奇和学习的愿望。
c++ - 如何使 event_base_loop 连续运行
我试图制作一个程序,该程序在事件生成的回调中读取文件描述符上的数据。但是一旦它读取了它退出的数据,即 event_base_loop() 只运行一次,我希望它在它读取数据时再次运行。现在我正在使用全局事件完成它,然后在回调函数中再次调用 add_event()
因为我必须制作一个具有多个 udp 套接字的动态代码,所以我不能使用这种方法,我使用的是 fedora 17,我的编译器是 g++ (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)
java - 如何在 SWT 画布中显示快速变化的图像?(paintControl() 侦听器方法没有被快速调用)
我在MouseMoveListener
合成上使用 a 来更新另一个画布上的图像。基本上,如果用户将 Composite1 拖到他屏幕上的某个位置,每次鼠标移动时都会调用 mouseMoveEventListener,这将获取鼠标的 x,y 位置,使用 截取屏幕截图Awt.robot.captureScreenRegion
,并尝试通过调用更新 Canvas1 的图像它的repaint()
方法。其目的只是在用户拖动合成时向用户显示合成下的预览。
这就是问题所在。虽然调用了 mouseMove 回调,并且它依次截取屏幕截图并及时调用 repaint 方法,但paintControl()
每次鼠标移动时都不会调用画布的实际侦听器方法(侦听其 Paint 事件)。即,如果您拖动合成,然后暂停几秒钟,这将调用重绘方法。但是,如果你只是将它一直拖到屏幕左侧而不暂停,则不会在每次 mousemove 时调用 repaint 方法,它只会在你停止/暂停移动暂停时调用。
有没有解决办法,即每次鼠标移动时是否可以强制发生绘制事件?我应该为重绘/预览创建一个新线程吗?预览外壳和主外壳都是两个独立的外壳。
编辑:绘制图像的方法:
(在调用 repaint() 之前,图像已从 BufferedImage 转换为 Image。从 system.out.println 日志中我可以看到一切正常,只有在paintControl()
我停止移动鼠标之前不会打印其中的日志。)
编辑 2:事件处理代码:
python - Python中用于CMD交互的事件循环
我见过一些与此类似的问题,但没有一个对我的特殊情况有真正帮助。我有一个循环遍历文本文件目录的脚本,每个文件都有一个单行脚本命令,需要通过命令提示符运行。基本布局如下:
当我只用一个文件测试它时它工作正常,但是当我在目录中一起做它们时,它们似乎在每个命令中的随机点停止。我认为这是因为它们重叠并且没有时间完成(具体命令是一个相当长的运行过程,每个大约 2 分钟)。在继续下一个之前,如何确保每个 os.system 调用都完整运行?
eclipse - Eclipse 未处理的事件循环异常,不再处理 Windows 7
我的 Eclipse 用于开发 Android 应用程序。它工作得很好,直到有一天,提示未处理的事件循环异常。日志如下所示。
要触发错误提示,只需将eclipse中的文本编辑器取消焦点,再次聚焦,即可触发提示,例如点击Package Explorer(红圈),点击Main.java中的代码(绿圈)蚀。(.xml 相同)。
但是,如果我通过单击Package Explorer(红色圆圈)使代码失去焦点,然后单击代码标题(蓝色圆圈),然后单击代码(绿色圆圈),则不会提示错误。
PS 可以使用 Eclipse 编译 Android 应用程序并在设备上正常工作。但是错误提示很烦人。
我努力了:
从 Android Developer 下载新的 ADT (Eclipse) 并解压,不工作,仍然没有句柄。
下载 Eclipse Standard 4.3.1 并解压,不工作。
重启我的电脑,重启 Eclipse。不工作。
创建一个Windows 7的新账号,用新账号在同一个工作区打开同一个eclipse(旧账号抛出错误),就可以了。不会抛出异常。
我试图用 C:\oldUser.android 替换 C:\oldUser.android,旧用户仍然抛出异常。
更改 Preferences > General > Editors > File Association > *.xml 和 Android Manifest 中的默认编辑器,不起作用。
在 Eclipse 中重置透视图,不起作用。
更改工作区并使用新的工作区,不工作。
我想使用旧用户帐户正确打开 Eclipse。
c++ - 在 C++11 中释放动态分配的 uv_timer_t (libuv) 实例
我有一个需要将任务安排到 libuv 事件循环的函数。我的想法是创建一个超时时间为 0 毫秒的计时器。我尝试了以下代码:
这种方法效果很好,但问题是,动态分配的计时器永远不会被释放。我尝试在回调中释放计时器,但这导致了分段错误:
我也尝试在实际内存释放之前调用uv_timer_stop(timer);
and uv_unref((uv_handle_t*) timer);
,但分段错误仍然存在。
c++ - dll中子应用程序中的c ++事件循环
再会,
我有以下问题:我有一个将文本文件写入磁盘的 exe 应用程序,但该 exe 源不可用。客户要求,当用户按下小键盘 5 时,会弹出一个新窗口,并对某些文件进行一些操作。
问题是,小键盘 5 + 新应用程序弹出窗口必须仅在应用程序运行并具有焦点时工作(他们使用小键盘 5 进行其他操作)。
我想过这个
- 创建一个带有执行所需操作的表单和按钮的 dll
- 在进程中注入dll
但我很难理解是否有办法在 dll 中创建“按键循环”。
请注意,我是 C++ 和表单的初学者,但我只需要可行性检查和方向。
是否可以在注入的 dll 中创建一个等待按键的窗口应用程序?有什么简单的例子吗?像疯子一样使用谷歌我无法找到对此的参考,所以我认为我对正确的条款有疑问。
我的主要问题是 dllmain 显然是一次性例程,我不明白如何创建“事件循环”。
感谢您提供的任何信息。
qt - Qt 信号和槽机制被 main 中的循环阻塞
我有以下情况。
- 在主循环
Socket
中创建了2 个对象(原始问题有 1000 个对象)。在创建时调用该方法。for
start()
start()
创建一个QTcpSocket
尝试连接到某个主机的。Socket
具有connected()
从 QTcpSocket 捕获信号并打印一些调试输出的插槽
发生的事情是按时间顺序首先Socket
创建所有对象,然后启动套接字。这是调试选项的示例输出:
代码:
这不是我所期望的行为,因为文档指出:
当一个信号发出时,连接到它的槽通常会立即执行,就像一个普通的函数调用一样。发生这种情况时,信号和槽机制完全独立于任何 GUI 事件循环。
问题:
当信号发出时,如何确保插槽“立即”执行(不仅在主循环完成之后)?
我目前看到的唯一可用的解决方案(不引入新线程):
在这种情况下放弃使用信号和槽,并在start
方法中实现所有内容。像这样的东西: