问题标签 [eventqueue]

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 回答
211 浏览

c - 在事件驱动的嵌入式系统中使用事件队列避免竞争条件

我正在尝试对 stm32 进行编程并使用事件驱动架构。例如,当发生定时器中断时,我将切换一个引脚,并在发生 ADC DMA 缓冲区满中断时将一些数据传输到外部闪存等等。

将有多个中断源,每个中断源具有相同的优先级,从而禁用嵌套。

我将使用中断来设置一个标志来通知我的 main 发生了中断并在 main 中处理数据。ISR 内部不会有处理/指令。

困扰我的是,从长远来看,在 main 和 ISR 中访问变量(在这种情况下为标志)可能会导致竞争条件错误。

所以我想使用循环事件队列而不是标志。

只有 ISR 能够写入事件队列缓冲区并增加“head”。只有 main 能够读取事件队列(并根据事件执行指令)并增加“tail”。

由于 ISR 嵌套被禁用,并且每个 ISR 将访问事件队列数组的不同元素,并且主函数只会在事件队列上有新事件时做出反应,所以避免了竞争条件对吗?还是我错过了什么?

如果我做错了什么,请纠正我。

谢谢你。

0 投票
0 回答
166 浏览

c - 为什么 gdb 不能读取 io_uring_cqe 内容?

我正在使用主线内核 5.12 在 Ubuntu 20.04 上尝试loti-examples(Uring 之王)提交 8724d47 和 liburing 提交 7ff4fee。

我将以下补丁用于 loti-examples 以获得更好的调试体验:

构建后,我启动gdb build/webserver_liburing了,这就是我正在做的事情:

我正在尝试验证request在提交队列上发送的指针是否与在完成队列上返回的指针相同。

因此,在第 441 行的断点处,您可以从 gdb 输出的最后一行看到,调用io_uring_wait_cqe成功,因为它的返回值ret为零。那么为什么我不能cqe->user_data用 gdb 阅读呢?我希望它包含与在第一个断点上提交到提交队列的地址相同的地址,并绑定到当时的名称data

编辑 5 月 12 日:

Mark Plotnick 暗示该地址可以是 I/O 映射的,实际上它是:

0 投票
1 回答
56 浏览

system-verilog - 用于标记不正确的 verilog 事件区域的 SV 断言

如果在verilog事件队列中的NBA区域中切换信号,是否有系统verilog构造可以标记错误?就像是

0 投票
0 回答
41 浏览

node.js - 动态发送剩余电子邮件节点js

我有一个应用程序,我必须在预约日期前1 周、2 天和2小时提醒用户。

我已经用 cron-job 实现了这个,但想知道有没有更好的方法,比如事件队列、微服务。

请分享您的意见。

谢谢你。

0 投票
0 回答
27 浏览

java - Java Thread和EventQueue的invokeLater如何一个接一个地运行?

我的要求是我想渲染 Window 中的所有组件,这是由 MyClass 的 initialize() 执行的,然后我想使用 java 线程开始一些处理,这是由 startProcessing() 方法完成的。但是当我在下面执行代码时,由 startProcessing() 启动的线程首先开始执行,因此必须在窗口中添加的组件不会出现,它是在所有线程都由 startProcessing() 完成之后出现的,但是当我我正在评论 startProcessing() 方法调用然后组件在几分之一秒内正确呈现

0 投票
3 回答
190 浏览

javascript - JavaScript onMouseDown 和 onClick 事件与事件队列

我有以下简单的 JS 代码(https://stackblitz.com/edit/web-platform-ueq5aq?file=script.js):

当我单击一个按钮时,我将“指挥棒”和“指挥棒点击”记录到控制台。现在我的问题是这里到底发生了什么?据我了解,在执行脚本的那一刻,处理程序mousedown被添加到偶数队列中。当我实际单击按钮时,此处理程序将运行,因此它从事件队列中获取,添加到调用堆栈并被执行。当它被执行时,处理程序“click”被添加到事件队列中。

之后实际上如何onClick触发事件onMouseDown?这与事件队列有什么关系?为什么在事件发生onMouseDown之前运行处理程序?click我问是因为我有很多更复杂的代码,在不同的场景中结果是不同的。

当用户导航到包含类似脚本的 SPA 页面,然后单击“接力棒”按钮时,顺序为:

mousedown 事件 -> 处理程序 mousedown -> 处理程序单击 -> 单击事件

当用户重新加载页面时,SPA 会直接加载到该页面上,然后单击“接力棒”按钮的顺序是:

mousedown 事件 -> 单击事件 -> 处理程序 mousedown

我正在寻求答案和真相。任何帮助将不胜感激。

附言。不幸的是,我无法在示例存储库中重现此错误 - 它发生在非常复杂的 Web 应用程序中,由于显而易见的原因,我无法在此处共享生产代码。

PS2。只是为了澄清一下,因为可能没有足够清楚地说明:我不是在问“为什么在单击事件之前触发 mousedown 事件”,而是在问“为什么在单击事件之前运行 mousedown HANDLER”。这并不明显,因为处理程序不会立即运行。处理程序要运行的顺序,首先要等待调用堆栈为空,这样事件队列才能被JS引擎处理。

0 投票
0 回答
36 浏览

javascript - setTimeout 和 AJAX onload 回调函数的执行顺序

我对 javascript 相当陌生,并且在对事件循环、回调队列和 webAPI 如何协同工作以在 Javascript 中实现异步有基本的了解之后。我有以下简单代码,包括 setTimeout 和 AJAX 来测试我对代码执行顺序的理解是否正确。

我期待结果是这样的:

警报('123') -> 警报('456') -> 警报('789') -> 警报('timeout1') -> 警报('请求完成')

我在想的是,首先setTimeout()属于浏览器API,所以它会从javascript的调用堆栈中弹出并在javascript引擎之外执行,然后脚本继续执行下一行代码。当它到达这条线 req.send()时,它也将在 javascript 引擎之外执行,然后脚本继续运行。

而且由于我将超时时间设置为0秒,所以setTimeout()回调函数应该在回调函数()=>{alert('timeout1')}之前先被推入回调队列(毕竟请求需要一些时间来等待响应,即使它非常快)。所以调用堆栈为空后的执行顺序是req.onloadfunction(){alert('request done');}

  1. 警报('timeout1')
  2. alert('请求完成')

但结果是:

alert('123') -> alert('456') -> alert('789') -> alert('request done') -> alert('timeout1')

显然我的想法是错误的。但我就是想不通。

如果我在这方面错了,请纠正我。感谢您检查我的问题!

0 投票
1 回答
25 浏览

python - 有没有办法知道 pygame 中事件队列的功能?

我写了以下内容来了解​​pygame中的事件队列。在这里,我等待三秒钟,直到event.get()调用下一个,在这 3 秒钟内,我通过键盘和鼠标执行了很多事件,

但我仍然在下一次打印中看到一个空白事件队列......

为什么会这样,因为如果我没记错的话,pygame 会将所有发生的事件排入队列event.get(),然后将队列返回给我们,然后将其清除。

0 投票
0 回答
11 浏览

python - python事件队列中的语法可执行性

我编写了一个多生产者单消费者系统,其中Service消费来自不同线程的事件并处理它们。这是消费者的外观:

这很好用,但是 和 之间没有语法可执行RPCEventService。例如我可以这样做:

有没有办法知道在写这一行时Service.fun没有参数?oops

我检查了Protocol文档,但找不到适合我的情况的创造性方法。