代码之家  ›  专栏  ›  技术社区  ›  innaM

如何防止Windows捕获Perl异常?

  •  4
  • innaM  · 技术社区  · 16 年前

    现在我有一个用户每隔一段时间就会休眠他的XP笔记本电脑。发生这种情况时,与服务器的连接将失败并触发异常。调用代码通常捕获该异常并尝试重新连接。但在这种情况下,Windows(或Perl?)正在捕获异常并通过消息框将其传递给用户。

    为了澄清你已经提出的一些观点:

    • 有问题的Perl模块确实抛出了一个异常。它的作用类似于“死吧”。尽管应用程序完全基于浏览器,不使用Wx或Tk之类的东西,但用户会收到一个名为“poll_timer”的消息框。该消息框的内容正是$@('foo bar'在本例中)的内容。
    • 应用程序使用 perlapp
    4 回复  |  直到 16 年前
        1
  •  1
  •   skiphoppy    16 年前

    我认为您处理的是操作系统级异常,而不是Perl抛出的异常。相关的Perl模块正在调用DLL中的某个东西(我想是这样),异常被抛出。您最好将其归结为一个简单的、可复制的、触发异常的测试用例(您可能需要进行大量的休眠和唤醒参与此过程的机器)。然后,将此信息发送给模块开发人员,并询问他们是否可以想出一种方法,以更有用的方式捕获此异常。

    如果模块开发人员不能或不会提供帮助,那么您可能最终需要使用Perl调试器来调试模块的代码,并查看到底发生了什么,并查看是否有方法可以自己更改模块来捕获和处理异常。

        2
  •  0
  •   converter42    16 年前

    在没有看到相关代码的情况下,很难提供明智的建议。如果您得到一个带有异常消息的对话框,程序很可能使用 Tk wxPerl GUI库,这可能会使事情复杂一些。尽管如此,我的猜测是,通过将失败点包装在eval块中并在调用后测试$@来修改程序中的异常处理是相当容易的。如果$@包含指示连接失败的错误消息,请重新建立连接并继续。

        3
  •  0
  •   Jonathan Leffler    16 年前

    你的用户不是例外,而是规则。我的笔记本电脑在工作和家庭之间处于休眠状态。在工作时,它在DHCP网络上;在家庭中,它完全在另一个网络上。尽管IP地址的多样性令人困惑(VMWare、VPN、通过NAT路由器的普通旧连接),大多数程序仍然可以继续工作。那些不(AT&t网络客户端,对于办公室中未使用的VPN,在家中或路上需要)在休眠时识别断开连接的用户(AT&t网络客户端保持待机/休眠进程,直到断开连接),我会在机器唤醒时重新建立连接(如果合适)。在机场,我使用本地WiFi(更多DHCP),但在登机前完全打开无线(一个物理交换机)。

    因此,您需要了解如何学习机器进入待机或休眠模式,以便您的软件可用。很抱歉,我所没有的,是你需要做的一个食谱。

    一些与Google的合作表明ACPI(高级配置和电源接口)是解决方案的一部分( Microsoft ). APM(高级电源管理)也可能是相关的。

        4
  •  0
  •   xdg    16 年前

    我发现了一种避免模式系统对话框出现硬错误的方法(例如,“遇到异常,需要关闭”)。我不知道同样的技巧是否能解决你所描述的这种错误,但你可以试试。

    Avoiding the “encountered a problem and needs to close” dialog on Windows

    简而言之,设置 值2的注册表项。