问题标签 [interruption]

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

exception - 在 Haskell 中处理 UserInterrupt 异常

我正在为 Haskell 中的 Scheme 解释器实现 REPL,我想处理一些异步事件,如 UserInterrupt、StackOverflow、HeapOverflow 等......基本上,我想在 UserInterrupt 发生时停止当前计算并打印发生 StackOverflow 和 HeapOverflow 等时的合适消息。我实现如下:

它按预期工作,但有一个例外。如果我启动解释器并按 Ctrl-Z + Enter,我会得到:

这是正确的。但是,如果我启动解释器并按 Ctrl-C 然后按 Ctrl-Z + Enter 我得到:

它挂了,我不能再使用解释器了。但是,如果我再次按 Ctrl-C,REPL 就会解除阻塞。我搜索了很多,我无法弄清楚它的原因。谁能解释我?

非常感谢!

0 投票
3 回答
732 浏览

.net - 是否可以强制由 FileStream.BeginRead 启动的异步读取操作提前完成,而不会出错?

首先,EndRead 的文档没有明确说明由 BeginRead 发起的异步读取操作是原子的或不可中断的。

问题

是否可以中断由 FileStream.BeginRead 启动的异步读取操作,以便它在填充缓冲区之前完成,返回到目前为止读入缓冲区的字节数,还是全有或全无操作?

换句话说,是否有一些像“Cancel_IO”这样的方法可以调用,这样当我调用 EndRead 时,不是等待读取所有可能的字节,而是由于读取被取消而更早返回?

背景

我已经阅读了 FileStream、BeginRead 和 EndRead 的文档。EndRead 没有任何能够触发操作过早完成的重载,返回部分已满的缓冲区。我感兴趣的是是否有人可以确认或否认 Windows 操作系统 API (Win32) 或磁盘驱动程序 API 中存在的方法,这可能导致 FileStream.BeginRead 启动的操作在 EndRead 时提前完成叫。“早期”是指在填充整个请求的缓冲区长度之前,没有错误。

用例

出于想象力的考虑,假设文件位于网络共享上,并且网络有时可能会遇到极端的减速,因此触发提前完成通用 1MB 缓冲操作将是实用且最佳的,以便检索在恢复新的 1MB 缓冲操作之前处理几个字节。

这些“几个字节”可用于启动大量计算密集型内存资源的构建,这些资源可以在允许缓冲完成时构建。

关于文档

请注意,BeginRead 的文档没有明确说明异步操作是原子的还是不可中断的。它所提到的是,如果发生“错误”,在调用 EndRead 之前您不会知道它。这并不排除可能发生其他一些不是错误的事件,这会导致 EndRead 返回的字节数少于请求的字节数,无论如何它一直都会这样做。

例如,“文件结束”和“缓冲区已满”可以看作是异步读取操作的两个“自然”中断,这会导致它返回的字节数少于请求的字节数,而不会出错。我正在寻找“人为”中断的可能性,这也会导致 EndRead 在 EOF 之前和缓冲区已满之前成功返回读入缓冲区的字节数。

0 投票
2 回答
1478 浏览

ios - IOS 音频中断

我正在使用来自 Matt 的旧 AudioStreamer 开发一个音频流应用程序,并且我试图通过使用以下方式进行中断(当接到电话时):

我的问题是我试图用 [self playpause] 调用函数“playpause”;但我得到一个错误 playpause undeclared !

如何在 MyAudioSessionInterruptionListener 中声明播放暂停?

0 投票
6 回答
5864 浏览

iphone - AudioSessionSetActive 中断后失败

我试图弄清楚几周以来实际发生的事情,但我不知道为什么在中断后我无法继续播放,所以你们可能知道答案。如果我的应用程序在后台播放并且我在不同的应用程序中,则在重新激活时,AudioSessionSetActive(TRUE) 始终返回“!cat”,即 kAudioSessionIncompatibleCategory。虽然如果我在我的应用程序中遇到中断,它可以正常工作并继续播放。

原始代码实际上将所有 AudioSession 和 AudioQueue 调用包装在宏中,如果这意味着错误,则会打印 OSStatus,但我将其删除以提高可读性。此外,[self pause] 只是切换暂停,所以基本上它在 upause 时调用 AudioQueueStart(audioQueue, NULL) 但如果 AudioSession 失败,它当然不起作用。

音频会话初始化代码:

中断处理程序代码:

这个流媒体源代码可以在这里找到https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m如果它会以某种方式帮助解决问题..

0 投票
1 回答
918 浏览

iphone - 发生中断时如何让我的音频应用程序在后台保持活动状态?

我正在尝试使用 AVAudioSession 和 AVAudioPlayer 以及音频背景模式来使我的应用程序在后台保持活动状态。如果没有中断,它工作正常。但是,当我收到 audioPlayerBeginInterruption 消息时,我启动了一个 backgroundTask 并等待 audioPlayerEndInterruption 消息,然后重新启动我的音频会话。

(我注意到在 audioPlayerBeginInterruption 应用程序仍处于活动状态后,播放器只是暂停,但在 audioPlayerEndInterruption 应用程序暂停后)

问题 1:如果 audioPlayerEndInterruption 消息在 10 分钟后到达,后台任务被终止,应用程序被挂起,我无法重新启动我的音频会话

问题 2:对于几个应用程序/游戏,我收到了 audioPlayerBeginInterruption 消息,但我从未收到 audioPlayerEndInterruption。

如何让我的应用程序始终处于活动状态?

感谢您的所有回答和建议

0 投票
2 回答
277 浏览

java - 在线程运行时中断它;下一次中断有什么影响?

让我们假设线程 t1 正在运行(即没有处于睡眠、等待或加入状态)。另一个线程 t2 中断 t1。Javadoc 说将设置 t1 的中断状态。

让我们假设 t1 稍后进入睡眠、等待或加入状态。发生什么了?

InterruptedExceptioni)由于线程 t1 处于中断状态,线程 t1 是否会自动引发?

假设 t1 仍处于睡眠、等待或加入状态。让我们假设 t2 再次中断 t1:

ii) 线程 t1 是由 an 引发InterruptedExecution还是需要通过调用interrupted()first 来清除其中断状态?

这个有官方的Java立场吗?谢谢。

0 投票
0 回答
167 浏览

iphone - iPhone 应用程序中断未正确报告给应用程序

这是一个边缘用例,但它提出了一个很好的问题。干得好:

我正在为 iPhone 开发一款游戏,当出现中断时我需要暂停游戏。如您所料,我使用中断处理程序applicationWillResignActive: applicationDidEnterBackground: applicationWillEnterForeground:applicationDidBecomeActive:暂停和恢复我的游戏、保存游戏进度等。

我在以下情况下遇到问题:

  1. 游戏正在运行,我做了一个多任务中断(双击主页按钮)。
  2. applicationWillResignActive:叫,游戏暂停,一切都很棒。
  3. 然后,在多任务栏打开的情况下,我执行三次主页单击中断(请参阅设置->常规->可访问性->三次主页单击并选择“询问”选项)。一个选项弹出窗口滑入多任务栏的顶部,应用程序中没有调用中断处理程序。
  4. 我取消选项弹出。 applicationDidBecomeActive:调用时,游戏会在多任务栏仍然打开时继续。这很奇怪。
  5. 我用另一个主页按钮双击关闭了多任务栏,没有调用中断处理程序。

山姆希尔在这里发生了什么???我见过其他游戏(例如间谍鼠标)似乎可以正确处理同一系列的中断。有谁知道是否有另一种方法可以从操作系统捕获系统事件,从而能够更精确地处理中断?那,还是我错过了一些明显的东西?

任何帮助或见解将不胜感激。提前致谢!

0 投票
2 回答
1519 浏览

java - Mac OS 10.7 Lion 下的 Eclipse 中断

不久前我升级到 Mac OS 10.7 Lion,虽然 Eclipse(面向 Web 开发人员的 Eclipse Java EE IDE,版本:Helios Service Release 2)工作正常,但有两件事进展得很慢:

  • 以前创建一个新项目需要几秒钟,现在大约需要 1.5 分钟。
  • 保存我的课程时,一切都会停止,旋转的等待光标会出现大约 1 分钟。在此期间,活动监视器将 Eclipse 标记为“未响应”。

我有最新的 Eclipse 更新。有谁知道什么可能导致这种行为?

谢谢,迈克

0 投票
2 回答
869 浏览

delphi - 如何中断 Delphi 中的查找对话框?

我有一个标准的查找对话框:

在此处输入图像描述

我的程序可以处理一些非常大的文件,在这些文件中查找文本可能需要 10 或 20 秒或更长时间。因此,在按下“查找下一个”按钮后,我将光标更改为沙漏。在找到或未找到文本后,我将其更改回标准指针。

我的问题是用户可能决定取消搜索并决定通过按下取消按钮来执行此操作。然后取消按钮关闭对话框,但在我的 FindDialogFind 例程中继续搜索,直到找到或未找到文本。

我在 FindDialog.exe 退出时设置了一个断点,但直到 FindDialogFind 完成后才到达断点。

有什么方法可以捕获已按下取消按钮的事实,这将允许我打破 FindDialogFind 循环,或者在按下取消按钮时是否有更好的方法来停止搜索?

0 投票
4 回答
1324 浏览

exception - 操作系统开发:如何避免异常例程后的无限循环

几个月来,我一直在研究“自制”操作系统。目前,它启动并进入 32 位保护模式。我已经加载了中断表,但还没有设置分页(还)。

现在,在编写我的异常例程时,我注意到当一条指令引发异常时,异常例程会被执行,但随后 CPU 会跳回到引发异常的指令!这并不适用于所有异常(例如,除零异常将跳回到除法指令之后的指令),但让我们考虑以下一般保护异常:

我的例程很简单:它调用一个显示红色错误消息的函数。

结果:MOV CS,EAX 失败 -> 显示我的错误消息 -> CPU 跳回 MOV CS -> 无限循环发送错误消息。

我已经和一位操作系统和 unix 安全方面的老师讨论过这个问题。他告诉我他知道 Linux 有办法绕过它,但他不知道是哪一种。

天真的解决方案是从例程中解析抛出指令,以获得该指令的长度。该解决方案非常复杂,我觉得在每个受影响的异常例程中添加对相对繁重的函数的调用有点不舒服......

因此,我想知道这是否是解决问题的另一种方法。也许有一个“魔法”寄存器包含可以改变这种行为的位?

--

非常感谢您提前提供任何建议/信息。

--

编辑:似乎很多人想知道为什么我要跳过有问题的指令并恢复正常执行。

我有两个原因:

  1. 首先,杀死一个进程将是一种可能的解决方案,但不是一个干净的解决方案。这不是它在 Linux 中的做法,例如,(AFAIK)内核发送信号(我认为是 SIGSEGV)但不会立即中断执行。这是有道理的,因为应用程序可以阻止或忽略信号并恢复自己的执行。这是一种非常优雅的方式来告诉应用程序它做错了 IMO。

  2. 另一个原因:如果内核本身执行了非法操作怎么办?可能是由于错误,但也可能是由于内核扩展。正如我在评论中所说:在这种情况下我该怎么办?我应该杀死内核并显示一个带有笑脸的漂亮蓝屏吗?

这就是为什么我希望能够跳过指令。“猜测”指令大小显然不是一种选择,并且解析指令似乎相当复杂(我不介意实现这样的例程,但我需要确保没有更好的方法)。