问题标签 [event-driven]

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

c - 用于嵌入式系统的 C 事件驱动 (GUI) 编程

我正在嵌入式系统中制作事件驱动的 GUI。我刚刚完成了小部件图形和触摸屏功能的实现。

我的问题是如何/提示在 C 和嵌入式系统上实现这一点。

这就是我在非常一般的“伪”代码中的想法:

在这里,我假设我有一个触摸屏,它将通过硬件中断唤醒我的微控制器控制设备。eventloop() 是一个永无止境的事件循环,它将处理任何事件然后进入睡眠状态,直到下一次触摸屏中断。触摸屏中断服务程序将从触摸屏获取 X 和 Y 坐标,并使用 post_event() 函数发布事件。event_handler() 函数是 eventloop() 函数中的一个函数,它将获取事件(如果有)并调用 handle_events() 函数。handle_events() 函数检查是否已使用给定事件、X 和 Y 坐标按下按钮(例如),如果已按下按钮,则返回非零按钮 ID。然后接下来是遍历按钮数组并检查相同的按钮ID并调用该按钮处理程序。

我试图描述的内容在事件驱动的编程方式中是否有意义?任何想法都非常受欢迎(请耐心等待,因为我是新手)。

0 投票
1 回答
197 浏览

parallel-processing - 我可以在事件驱动的 Python Web 应用程序中并行化什么?

我正在尝试在 Tornado 上制作一个简单的应用程序,而 Tornado 是一个事件驱动的Web 服务器,并且因为它在 Python 上,所以我将尝试使用 Multiprocessing,但是在什么方面?

密码散列是线性运算,不是吗?如果我对密码进行 1000 次哈希运算,那么每个n操作都需要该n-1操作吗?

图像处理呢,如果它们在表单中使用,那么它必须等到客户端验证他的表单否?

我可以从多处理中获得的唯一示例是 3D 渲染,您获得的流程越多,您获得的时间就越多。

0 投票
3 回答
1442 浏览

c# - 等待阻塞收集(队列)在 C# 中减小大小

我正在使用以下工作流程进行项目:

第一部分:

  • 事件异步到达并在阻塞队列中排队,我们称之为Q1
  • 线程从该队列中获取下一个可用项目
  • 项目最终并行运行 {N} 个任务
  • 每个任务将其结果排入第二个队列,我们​​称之为Q2
  • 当项目处理完成时,从队列中读取下一个项目。

第二部分:

  • 另一个线程一次读取Q2一个对象并处理结果

所以,这里的问题是,第一个队列中的每个项目最终都会并行运行大量任务,每个任务都将其结果排队。第二个队列必须按顺序处理,一次一个项目,但它被淹没了。


我的问题

我需要一种机制,使线程处理Q1等到Q2中的项目数低于特定阈值。实现这一目标的最佳方法是什么?有没有办法拥有事件驱动的解决方案而不是轮询解决方案?

0 投票
1 回答
7048 浏览

javascript - 在 Angular.js 应用程序中进行事件驱动开发的最佳实践是什么?

我正在向我们的 Angular 应用程序添加一些 websocket 功能。Websocket 对象被包装在一个服务中。理想情况下,我们希望我们包装的套接字对象有一个标准的事件 API,以便我们可以在控制器中使用它,如下所示:(抱歉,Coffeescript)

我们实现这一目标的最佳实践/库是什么?使用jQuery?Backbone.Events?任何建议都会有所帮助。谢谢!

0 投票
1 回答
1535 浏览

multithreading - 事件驱动有什么魔力?

在阅读了几篇关于事件驱动和 nodejs 的帖子后,我看到的唯一优点是事件驱动避免了线程的内存分配,并在可能的情况下用通知代替了轮询。

其他优点都是有争议的:

  1. 多线程程序比单线程程序更容易出错。

    争论:对于 web 应用来说,请求是相互独立的,只要处理函数没有副作用;如果所有 IO 部分都由数据库服务器处理,则无需担心多线程。

  2. 事件驱动的方法不会阻塞 IO,因此可以处理更多的请求。这种优势似乎是事件驱动的最重要特征。在这个例子中,它与医生办公室进行了比较,我认为这是不合适的。

    争论:在医生办公室的例子中,接待员不等待病人填写表格,而是在前一个病人填写表格时为其他病人服务。这是一个误导性的例子。

    一个。如果我们将患者解释为向服务器发送请求的客户端。服务器当然不会阻止客户在自己的浏览器中填写表格。当客户端完成表单并向服务器发送 http POST 时,服务器将开始工作。在 nodejs 存在之前,Web 已经是一个事件驱动的系统。所以这个例子对于解释服务器端事件驱动编程是无效的。

    湾。有人会说,我们应该把患者填表理解为服务端IO密集型操作。但不同的是:我们不为患者填写表格付费,但我们为 IO 密集型手术付费。

    所以我的观点是,即使耗时的操作没有阻塞你当前的线程,也会有其他线程,或者进程或数据库服务器被阻塞。我多次看到 nodejs 可以提供 10k 个并发连接,因为它没有阻塞。我想说,如果没有足够的其他线程或进程或服务器来处理耗时的部分,那是不可能的。

在这种情况下,事件驱动无非就是使用 Nginx 进行负载均衡,只不过负载均衡是对应用程序的请求进行均衡,而事件驱动则是将请求均衡到耗时的操作,这将负载均衡层向后移动。这样做的唯一好处是我在这个问题开头提到的两个:1.它避免了线程的内存分配。2. 尽可能用通知代替轮询。

感谢您阅读至此,我的问题是:我的理解是否正确?我在论证中犯了什么错误?

0 投票
1 回答
565 浏览

mysql - MySQL vs Redis 用于存储关注者/关注用户

我正在尝试找到存储关注者/关注用户数据的最佳候选者,我最初考虑将其存储在 Redis 中的一组用户 - > 用户 ID 组中,但后来我想到了超过 100 万的场景甚至一个用户有 1000 万粉丝,Redis 将如何处理如此庞大的集合?我也无法在 redis 中对集合进行分页,如果用户想要浏览跟随他的人,我必须检索整个集合,这将不起作用。如果我将它存储在 MySQL 中,我肯定可以进行分页,但是每当我必须构建用户提要时,从数据库中获取 1000 万条记录可能需要很长时间,我可以用旧的批处理方式来做这件事,但是当一个拥有很多粉丝的用户发布一些东西然后处理这 1000 万条记录只是为了获取他的粉丝时,这听起来仍然很痛苦。将它存储在 MySQL 中用于分页(主要是前端)和 Redis 中用于构建活动提要的事件驱动消息传递是否值得?

0 投票
1 回答
306 浏览

c - 多处理器架构中的状态机事件生成

目前,我正在与一位同事进行小型架构争论。我希望你们中的一些人可以通过强烈建议一种方法而不是另一种方法来帮助解决它。

我们有一个 DSP 和 Cortex-M3 与共享内存耦合在一起。DSP 接收来自外部世界的请求,其中一些请求将执行某些只能在 CM3 上完成的无线测试功能。DSP 写入共享内存,然后通过中断向 CM3 发送信号。共享内存指示请求是什么以及执行请求所需的任何必要数据(调谐到的通道、要读取的 RF 芯片的寄存器等)。

我的偏好是为中断中可能发生的每个请求生成一个唯一的事件 ID 。然后在离开中断之前将事件传递到状态机的事件队列,该队列将在专用于 RF 活动的线程中处理。

相反,我的同事希望将单个事件 ID(通用 RF 命令)传递给状态机,并在状态机中接收到此事件 ID 后对共享内存区域进行解析。解析后,您将知道需要执行的特定命令。

我不喜欢这种方法,因为您将在您碰巧处于的任何状态下解析共享内存。您可以将其设为函数,但它仍然是应该与状态无关的处理。她不喜欢在中断中解析共享内存的想法。

对更好的方法有何评论?如果有帮助,我们将使用 Miro Samek 的 QP 框架来实现状态机。

编辑:将状态图移至ftp://hiddenoaks.asuscomm.com/Statechart.bmp

0 投票
1 回答
819 浏览

perl - 如何绑定到 Mojolicious 中按钮的 onclick 事件?

我正在尝试制作一个小型 web 应用程序来控制我使用的命令行音乐播放器(mocp),但是当用户按下页面上的按钮时,我无法点击路由。我预计问题与我缺乏 HTML 有关。

代码:

如果我直接导​​航到路线(例如“/play”),一切都会按预期进行。目标是简单地单击“播放”按钮来执行相关的方法,而不必手动输入路线。我在这个阶段的问题是:

  1. 将这些方法映射到路由是解决此问题的最佳方法吗?
  2. 如果是这样,我如何像在 JavaScript 中一样触发带有“onclick”按钮事件的路由?

非常感谢任何建议。

0 投票
1 回答
155 浏览

javascript - 回调get函数与事件驱动设计相结合

我想用 get 函数制作一个 API(node.js)。我使用的模块支持写入,所有传入数据都由我也可以订阅的事件发出。底层系统基于轮询。

但我还想添加写入的轮询器(使用 setInterval)。当我添加一个请求 rpm 的侦听器时,我每秒都会获得 RPM 信息。当我同时为 vss 调用 get 时,可能 data.name 和 type 不匹配。这让我现在搞砸了。

所以基本上,我可以在 else 块中填写什么,最佳实践是什么?或者这整个设计是一种不好的做法?在这种情况下不应该支持 get 吗?

由于不同变量(rpm/vss)上的轮询器,可以发出更多的“dataReceived”事件。如何获得正确的 get 值?

我想得越久,我就越认为我不应该支持 get 函数,而这个 dataReceived 事件也是由轮询器触发的。

0 投票
0 回答
54 浏览

events - 事件驱动程序的实施

事件驱动编程是如何实现的?它只是一个检查所有激活/需要/可能事件的while循环吗?

这对我来说似乎真的错了。在事件被激活之前,事件驱动程序不应该做任何事情,对吧?这只会循环和循环..可能cpu会越来越高。

我在互联网上找不到任何实现代码。