有没有办法设计一个Windows应用程序,以便它始终响应(使用输入等)

时间:2014-04-30 17:38:53

标签: operating-system freeze

我确信每个中级计算机用户,如果不是每个计算机用户都经历过他的操作系统被冻结,因为某些程序会占用所有处理能力或所有内存。

然而,在几乎所有这些情况下,鼠标指针都响应。你不能点击任何东西。

所以我想知道,有没有办法使用一些低级输入挂钩,无论如何都会立即触发输入。此外,应用程序需要在单独的线程/环境中运行,以便始终优先于可能会冻结操作系统的其他任务。

标题中的Windows是因为我并不真正使用Linux,所以我不知道这些事情是否会在任何地方发生。

现在,我认为答案是否定的,看看像任务管理器这样的程序将成为这类功能的第一批候选者,MS应该是最适合在自己的操作系统中实现它的人。所以如果答案确实没有,那么问题就变成了,为什么。

是否有一些根本原因导致无法做到这一点?单独的高优先级应用程序层,只有用户批准的应用程序才能使用。

3 个答案:

答案 0 :(得分:2)

有两种问题,一种必须区分它们:

  1. 一个应用程序没有响应,而系统的其余部分都是响应式的。这是由于阻止GUI线程的糟糕设计。

  2. 整个系统没有响应。这通常是由于内存压力和物理RAM耗尽造成的。虽然可执行页面正在从交换区域进行混洗,但CPU不能执行很多操作,但后者主要是非分​​页的。鼠标指针通常完全在内核空间中管理。

  3. 对这两个问题都有很好理解的解决方案。第一个涉及编写软件,就像它是2014年,而不是1995年(使用libdispatch风格的异步线程等)。第二个是让硬件与个人的要求/需求相称。

    所以是的,可以设计这样的应用程序,只要它在具有足够资源(处理核心,RAM等)的硬件上运行,以有效地支持其操作。当然没有任何保证,因为它确实在用户空间中运行,因此有缺陷的驱动程序等可能会减少用户输入的延迟。

    如果你想要保证,可以在实时操作系统上运行,但在那里你有时可以得到你想要的东西:一个行为不端的应用程序,在高效的内核的帮助下,可以很快耗尽系统资源并触发看门狗重启

答案 1 :(得分:1)

这可能不是完美的答案或准确,但我会写一些想法。

如果您的应用程序中有一些冻结,通常是因为您的系统出现问题(内存不足,HD故障,需要大量CPU的过程等)。我不知道如何为取代任何其他应用程序的应用程序获得更高的优先级,即使是那些高优先级的应用程序。 OS作业是在应用程序之间分配CPU时间。如果它不能完成这项工作,那可能意味着目前不可能。

此外,当屏幕冻结时,了解确切冻结的内容非常重要。如果它是UI渲染(鼠标似乎由与一个渲染应用程序不同的系统渲染),则可能无法执行某些操作。 在所有操作系统上,只有1个UI线程。如果它被冻结,它将适用于所有应用程序。当UI被锁定时,输入将无法工作,因为输入是在同一个线程中处理的。

如何解决这个问题?可能不可能。 Linux因为它的构建方式而更好地处理这些UI问题,但它也会发生。不同之处在于您可以终止UI并重新启动它而无需重新启动计算机。

今天创建应用程序的一个好方法是使用主线程来完成所有基本内容(UI /输入)并在另一个线程中进行处理。因此,如果另一个线程挂起或太长,您可以杀死它们而不会杀死您的应用并让它保持响应。

希望它回答你的一些问题。

答案 2 :(得分:0)

  

我确信每个中间计算机用户,如果不是每个计算机用户   由于某些原因,他的操作系统经历了冻结   程序要么占用所有处理能力,要么占用所有处理能力   存储器中。

实际上没有,不是自NT / W2K以来。要完全冻结整个操作系统,你必须努力,例如。创建与核心一样多的实时,最高优先级的线程。

当然,有些应用程序没有响应,通常是因为设计阻塞了GUI线程,(正如其他人所建议的那样),但这并不妨碍其他应用程序正常运行。