问题标签 [blocking]
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.
python - 在python中轮询键盘(检测按键)
如何从控制台 python 应用程序轮询键盘?具体来说,我想在许多其他 I/O 活动(套接字选择、串行端口访问等)中做一些类似的事情:
在 Windows 上执行此操作的正确 pythonic 方法是什么?此外,Linux 的可移植性也不错,尽管它不是必需的。
perl - 仅当存在完整行时,如何从 IO::Socket::INET 文件句柄中读取?
从IO::Socket::INET文件句柄中读取时,不能假定流中总是有可用数据。有哪些技术可用于查看流以检查数据是否可用,或者在进行读取时,如果没有有效的行终止,则不获取数据并立即通过读取?
python - 如何防止覆盖其他人修改过的对象
我想找到一种通用方法来防止在我签出对象后保存对象。
我们可以假设对象有一个timestamp
包含上次修改时间的字段。如果我在 处签出(例如使用 ModelForm 访问了视图)t1
并且对象再次保存在 处t2
,假设t2
>t1
我应该无法保存它。
c# - c#一个表单在winform项目中阻塞另一个表单
我有一个使用 2 个表单的应用程序,一个主表单和一个启动表单,用于以下配置:
注意:主窗体是使用以下代码创建的:
上面的问题是splash的配置不会发生,除非splash被关闭了
只有当这种情况发生时,MainForm 构造函数的其余部分才会运行。我怎样才能轻松阻止这种阻塞行为?
sql-server - 可以使 SQL Server 2000 填充全文目录而不阻塞它正在读取的表吗?
我在 SQL Server 2000 上有一个数据库服务器(是的,我知道...),它的一些表上有全文目录。我目前在安静的时间过夜,我希望能够在白天更新目录,以便在搜索中考虑新数据。
我注意到的问题是,当增量填充运行时,会出现大量阻塞,这是由填充过程引起的。该数据库上的其他事务正在使用“未提交读”或脏读,以最大限度地减少延迟(我并不特别关心最新的准确数据),所以我不确定为什么人口,本身只是读取数据,阻止它们。
任何线索,提示?
c - 如何在命名管道 (mkfifo) 上执行非阻塞 fopen?
如果我有一个程序使用 mkfifo 创建并尝试打开命名管道,我如何打开管道进行读取或写入而不阻塞?
具体来说,我正在编写一个可以在有或没有 gui(用 Java 编写)的情况下运行的 C 程序。
在 C 程序中,我使用 mkfifo 成功创建了命名管道,但是当我这样做时
在 GUI 打开该管道进行写入之前, fopen 不会返回。我想要做的是让该管道准备好读取一次(如果)GUI决定写入它 - 我将把文件描述符放在 select() 调用中。可以合理地预期 java GUI 可能永远不会真正启动,因此我不能依赖它在任何特定点甚至根本无法打开管道的另一端。
我还将打开第二个管道进行写作,我想我也会遇到同样的问题。此外,我无法在没有阅读器的输出管道上设置 O_NONBLOCK。
有什么建议么?
(这是在linux系统上运行的)
java - Java InputStream 阻塞读取
根据java api,InputStream.read()
描述为:
如果由于到达流的末尾而没有可用的字节,则返回值 -1。此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。
我有一个while(true)
循环进行读取,当没有任何内容通过流发送时,我总是得到-1。这是预期的。
我的问题是 read() 什么时候会阻塞?因为如果它没有得到任何数据,它会返回-1。我希望阻塞读取要等到收到数据。如果您已经到达输入流的末尾,那么 read() 不应该只是等待数据而不是返回 -1 吗?
或者 read() 只有在有另一个线程访问流并且您的 read() 无法访问流时才会阻塞?
这引出了我的下一个问题。我曾经有事件监听器(由我的库提供),它会在数据可用时通知我。当我收到通知时,我会调用while((aByte = read()) > -1)
存储字节。当我在非常接近的时间内获得两个事件并且并未显示我的所有数据时,我感到很困惑。似乎只显示了第二个事件数据的尾部,其余的都丢失了。
我最终更改了我的代码,以便当我收到一个事件时,我调用if(inputStream.available() > 0) while((aByte = read()) > -1)
了存储字节。现在它工作正常,我的所有数据都显示出来了。
有人可以解释这种行为吗?据说InputStream.available()
返回在阻塞下一个调用者(流的?)之前可以读取的字节数。即使我不使用 .available() 我希望读取第一个事件只会阻止读取第二个事件,但不会擦除或消耗太多流数据。为什么这样做会导致无法显示我的所有数据?
c++ - 如何避免阻塞(C++、Win32)
我正在制作一个必须响应应用程序请求的 dll。应用程序的要求之一是调用不应花费很长时间才能完成。
比如说,我有一个函数 foo(),它由主机应用程序调用:
可以说, foo 必须执行肯定需要很长时间的任务(或调用函数)。该应用程序允许我设置一个等待变量;如果 foo 返回时此变量非零,它会一次又一次地调用 foo(在每次调用之前重置等待变量),直到等待返回 0。
最好的方法是什么?
我去吗:
这并不能真正解决 LongyRoutine 需要很长时间才能完成的问题。我是否应该根据它是否完成任务来生成某种类型的线程来更新 inRoutine?
谢谢..
c++ - 你将如何实现一个基本的事件循环?
如果您使用过 gui 工具包,您就会知道在一切完成后应该执行一个事件循环/主循环,这将使应用程序保持活跃并响应不同的事件。例如,对于 Qt,您可以在 main() 中执行此操作:
在这种情况下, app.exec() 是应用程序的主循环。
实现这种循环的明显方法是:
但这会将 CPU 限制为 100%,并且实际上毫无用处。现在,我怎样才能实现这样一个响应式的事件循环而不完全占用 CPU 呢?
答案在 Python 和/或 C++ 中表示赞赏。谢谢。
脚注:为了学习,我将实现自己的信号/槽,并使用它们来生成自定义事件(例如go_forward_event(steps)
)。但是,如果您知道我如何手动使用系统事件,我也想知道这一点。