项目说明
我为CAD系统编写了一个批量翻译CAD文件的插件。我希望能够在无人值守的情况下运行插件。在处理CAD文件时,有时会从CAD程序本身请求用户交互。我在这个项目上工作的另一个人使用AutoIt编写了一个程序来响应消息框,这适用于大多数遇到的情况。
插件使用Visual Studio 2010以C ++编写,使用AutoIt编写脚本程序。操作系统是Windows 7。
问题
某些CAD文件会导致CAD程序锁定。我们尝试通过使用AutoIt程序检查窗口标题中的“Not Responding”来解决这个问题,然后终止并重新启动CAD程序和插件并从中断处继续。这适用于实际锁定CAD程序的文件。问题是,当CAD程序需要很长时间才能完成时,窗口标题中有时会出现“无响应”,而实际上并没有锁定。
目前的解决方法
我们现在提出的解决方法是在出现“无响应”后在AutoIt程序中设置延迟,然后在重新启动程序之前再次检查。问题是它只是猜测设置计时器的时间。
问题
现在提出我的问题。是否有一个Windows API我可以用来区分程序实际被锁定或只是花了很长时间?或者我只需要将计时器设置得足够高,我认为这足以涵盖这种情况?
答案 0 :(得分:2)
不幸的是,变得反应迟钝既不是考虑进程锁定的必要条件,也不是充分条件。一个优秀的程序员可以轻松地保持UI响应,而算法线程已经陷入无限循环。
要尝试的事情:
开始创建CAD文件大小的日志,再次显示完成转换所需的时间。这将很快允许您估计给定输入大小的等待时间。如果这是相关的。这样,如果CAD程序经常在小输入上锁定,您就不必等待很长时间。
观察CAD程序锁定时的行为。它是在旋转CPU(无限循环)还是在CPU利用率较低时死锁(可能是互斥等待的互斥)?成功转换期间怎么样? CPU是否总是最大化或上下移动,因为交错的IO会发生?如果您发现差异模式,那么这可能有助于您区分仍在运行与死锁。
将失败的CAD文件发送给您的CAD供应商并让他们修复他们的代码(哈哈,我知道)。