2019-07-17 13:15发布
mjc2007 发表于 2018-1-4 19:50 从资源管理器中发现CPU和内存使用都正常,而且偶发出现程序卡死,强制关闭就出现重置VI,请问什么原因呢?
最多设置5个标签!
强制关闭VI也不是立即就结束所有的ni相关进程,当点击了关闭,ni自带的垃圾处理功能就会运行,用来处理运行时产生的资源消耗,像一般的c,c++等语言需要自己编写垃圾处理的,就拿打开文件来说吧,labview允许你调试的时候只打开文件而不关闭,并且在你结束之后自动调用结束这个功能,这个在lv开发环境下是可取的,c,c++肯定是不允许的。另一个例子就是关于labview中的while循环的问题,当你有一个while循环没有任何退出条件,但是你又结束了当前while循环所在的vi,此时labview是不会去结束你的那个while循环的,而是把那个循环当做一个单独的线程去运行,但是有可能该while循环内部调用了已经被结束的vi的控件,那么此时while循环就访问了一块非法的内存,那么labview就需要去针对这个while循环做异常结束,也就是看到重置vi这个提示。
关于程序优化的建议,所有的循环尽可能给出退出的条件,而不是无休止的一直执行,关闭vi前面板的时候,请一定要结束所有的相关的循环,避免自动变成后台的僵尸进程。推荐使用关闭labview而不是关闭vi,关闭labview会关闭所有的子进程。适当的禁止前面板自动刷新,前面板最好用事件结构处理,但是处理前面板的时候最好关闭延迟响应,前面板按钮等控件所触发的事件最好用子VI去调用,这样不会出现前面板假死。数据传递到子VI比直接拖一大堆框图节点效率更高一些,并行的几个循环一定要注意变量值的变化,轮询模式的标准状态机一定要给while循环加至少50ms延时。事件结构千万不要嵌套,也不要在同一个vi中使用两个或更多的事件结构,一个vi最多一个事件结构,否则很大概率会出现事件无响应。条件结构嵌套最好不要超过3层,如果超过了,请话卡诺图重新整理逻辑,否则很大概率得不到正确的结果。
一周热门 更多>