问题标签 [nonblocking]
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.
c# - C# 在使用 COM 互操作的 SQL 查询期间实现响应式 UI 的最佳方法
我正在为用 VB6 编写的 EXE 制作 C# DLL 插件。我无法访问 EXE 的源代码。DLL 本身可以正常工作并与 EXE 通信良好。
这是一个事件的过程:
- 用户在 EXE 上发出命令,然后调用 DLL 中的函数,将对象作为参数传递
- DLL 处理有时需要很长时间的数据
DLL 通过调用传递的对象的函数来响应。DLL 函数本身不返回任何内容
/li>
我的问题是在长查询期间(来自 DLL),EXE 的 UI 冻结。
防止这种情况的最佳方法是什么?我曾尝试使用异步 MySQL 查询,但效果不佳,并尝试使用多个线程,这只是遇到受保护的内存问题。
你能提供的任何建议都会很棒。几天来一直试图解决这个问题。谢谢。
ruby - 使用 EventMachine 的 SOAP 调用
有没有办法在 EventMachine 中发出非阻塞 SOAP 请求?
我正在使用 adwords4r gem 创建一个与 google adwords api(基于 SOAP)交互的 ruby 应用程序。该应用程序使用 EM 通过 stomp 连接接收消息,然后通过对 adwords api 进行 SOAP 调用来处理这些消息。显然我需要这些调用是非阻塞的,因为处理将在反应器线程内。一种选择是使用 EM.defer,但我宁愿没有线程池中一堆线程的开销。
c# - 设备驱动程序 DLL 阻塞与非阻塞?
我的公司生产一种通过 USB 连接到 PC 的产品。我正在为此产品编写一个使用 Visual C# 的 DLL 驱动程序,以便任何想要编写可以控制或设备的程序的人都可以这样做。驱动程序将执行的某些操作需要几秒钟才能完成设备(例如将电机在设备中移动 10,000 步)。我正在考虑对这个驱动程序使用两种不同的方法,但我不确定哪种方法是理想的。
第一种方法:使命令非阻塞。基本上,客户端应用程序会调用我的 dll 中的一个方法来启动电机转动,并且该方法会立即返回。然后我会有一个事件,“MoveFinished”,在移动完成时触发。这种方法将允许客户端应用程序在电机移动时不会冻结并执行其他操作,而无需使用多线程。
第二种方法:使命令阻塞。因此,当客户端应用程序调用 Move 方法时,该方法会阻塞并且在移动完成之前不会返回。这将导致客户端应用程序在移动发生时冻结(除非它们使用多线程),但它也可能很有用,因为它不会允许客户端应用程序犯愚蠢的错误,例如在设备时调用 move 方法已经在动了……
有没有人有任何经验、智慧、评论或想法可以分享?
c - sendfile() 完成到非阻塞套接字
在我的程序中,我需要检查非阻塞套接字中的 sendfile() 操作是否完成。怎么可能呢?
检查文档并在互联网上搜索后,我无法找到如何去做
c - 关闭非阻塞套接字
我在 C 中有以下代码。
我在非阻塞模式下使用带有 setNonBlocking 功能的套接字。当我关闭套接字时,应用程序立即退出而没有段错误或其他任何东西。如果我不使用 setNonBlocking 函数,我看不到这个问题。
如何在没有此问题的情况下关闭非阻塞套接字?
c - 使用 Select 的非阻塞套接字
我不明白在选择返回它已准备好读取之后等待调用 recv() 后在非阻塞套接字上调用 recv() 与阻塞套接字之间有什么区别。在我看来,阻塞套接字无论如何都不会在这种情况下阻塞。
另外,我听说使用非阻塞套接字的一种模型是在经过一段时间后尝试对它们进行调用(recv/send/etc),而不是使用诸如 select 之类的东西。与使用类似 select 的东西相比,这种技术似乎很慢而且很浪费(但是我根本没有达到上述非阻塞的目的)。这在当今的网络编程中很常见吗?
cocoa - 使用 Cocoa 的异步 IO,关闭调用需要永远吗?
我正在编写一个单线程 Cocoa 应用程序并尝试使用NSNotificationCenter
实用程序方法(因为这似乎是可可中的工作方式)来执行非阻塞 IO。
除了文件句柄关闭时,一切似乎都正常。它最终会通知我,但它需要很长时间。谁能解释为什么会这样?
更具体地说,我正在编写一个分叉进程并读取其标准输出的屏幕保护程序。行为也会根据上下文发生变化。当它在“系统偏好设置”的预览窗口中运行时,它会更快地通知关闭,然后在单击测试按钮时全屏运行。
编辑:经过一番思考,我相信问题在于最后一次写入和关闭几乎同时发生。最后一次读取发生在NSFileHandle
关闭之后,它返回数据(即不在 EOF 处)。我通过等待它完成,但由于文件句柄处于非活动状态,主循环将保持阻塞,因为没有任何信号通知它执行。预览模式起作用的原因是,每当我单击“系统偏好设置”窗口中的某些内容时,我都会强制执行主循环,它会检查NSFileHandle
正在等待的状态并看到它已关闭。
现在我想我知道发生了什么,但我仍然不知道如何弄清楚它是在NSFileHandle
没有阻塞的情况下关闭的!
经过更多测试后,此问题似乎是屏幕保护程序执行时独有的。
c# - 非阻塞 UDP 客户端接收线程安全调用
多年来,我一直在寻找解决这个问题的方法。我尝试了很多东西,包括 BeginReceive(),但都无济于事。必须有办法做到这一点,使 UDP-Client 接收非阻塞和线程安全的调用。我正在尝试接收消息并将其写入富文本框。
足够的代码,是吗?提前感谢所有回复。
c - 当作者来来去去时从命名管道重新读取
我遇到了一个问题,我必须从命名管道中读取。我必须处理命名管道的编写者来来去去的情况,但我需要在整个应用程序中保持相同的管道打开。
我在下面的代码中总结了这一点。
我遇到的问题是,在第一个进程写入命名管道并且断开连接(关闭)它结束后,我的程序不会阻塞选择。它有效地设置了 rfd,并且读取返回在紧密循环中读取的零字节。
我需要 rfd 处于 NON_BLOCKING 模式,否则打开将阻塞,直到出现作家。
我尝试使用 fcntl 设置为 BLOCKING 模式,但这也不起作用。
我对管道语义的有限理解使我认为我需要清除管道上的 EOF 状态,以便 select 现在会阻塞。但是,我不知道该怎么做。
我投身于你的集体智慧:) 马克。
python - 已作为非阻塞打开的管道上的 Python readline
我有一个以非阻塞模式打开的 Linux fifo。正如预期的那样,当我对文件对象调用 read 时,它会立即返回。我使用 select 来确保没有忙等待,但是当有任何可用数据时,我的程序仍然会收到通知。出于好奇,我尝试了 readline 函数,并惊讶地发现 readline 会阻塞,直到找到换行符。我通过 top 检查了处理器的使用情况,似乎 readline 并没有忙于等待。由于我的应用程序对性能很敏感,我想知道在非阻塞套接字上使用 readline 时是否会对性能产生影响。