为什么当执行一个TestStand序列时CPU使用会升至100%?
主要软件:
主要软件版本: 2.0.1
主要软件修正版本: N/A
次要软件: N/A
问题: 当执行一个TestStand序列时,CPU使用变为100%,从而导致在背端运行的程序非常缓慢并且没有响应。为什么会发生这样的情况,我该如何来解决?
解答: 首先需要确认的是你的序列或各个步骤模块中是否有直接长时间运行循环的情况发生。
只要当任何包含长时间运行循环的程序(在任何编程环境内编写完成),如果该循环以尽可能快的速度运行的话,都会导致该线程一直运行从而使用了配置给它的所有CPU时间片。只是因为CPU使用率(在Windows任务管理器中可查看)上升到100%,这并不意味着这个特定的程序垄断了整个CPU,从而导致其他程序不能运行。它只是表示该线程已经使用完全了CPU给它的时间片。事实上,如果一个特定的线程导致CPU使用率上升到100%,这个实际上是表示程序以尽可能快的速度执行,从而将当前的执行的响应最大化。
所谓的其他程序会显示得没有任何响应或者被阻断来接收足够的CPU读写这样的情况,只是因为当一个在其他程序中特定的线程具有比其他线程更高的优先级,并且它还有一群指令需要执行,比如一个长时间的循环在运行。为了避免这种情况发生,你不应该随意修改线程的优先级,并且好好利用处理器时间,并放弃编程环境中你使用的一些方法(比如Sleep(),Delay()或者Wait())。你甚至可以将有问题的线程的优先级设置为比一般优先级低
例如,可以参考下面的关于如何在TestStand,LabVIEW以及LabWindows/CVI中放弃某一个特定线程的处理器时间或者管理线程的优先级:
TestStand: 我们可以在循环中使用Wait步骤,并且调整它的时间间隔直到你达到期望循环响应与减少的处理器时间之间的平衡,从而减少在一个序列循环中的处理器时间。可以在你的序列开始时添加一个Thread Priority步骤来改变该序列执行的线程优先级。
LabVIEW: 为了修改一个VI步骤代码模块的执行优先级,可以打开这个VI,并且选择
File » VI Properties... ,然后在下拉菜单中选择
Execution 这个类别. 其中两个下拉菜单会出现,分别为
Priority 和
Preferred Execution System will appear. 为了减少程序循环中的处理器时间,你可以在循环中使用
Wait Until Next ms Multiple VI 并且调整它的时间间隔直到达成期望循环响应与减少的处理器时间之间的平衡。
LabWindows/CVI: 为了能让CVI Run-Time引擎的Windows管理系统能够减少处理时间以及更慢地执行用户界面时间,可以在你的CVI DLL步骤代码模块的GUI初始化函开头添加
SetSleepPolicy(),并且选择VAL_SLEEP_MORE选项. 如果你的DLL会产生新的线程,你可以通过使用CmtSetThreadPoolAttribute()函数以及它的ATTR_TP_THREAD_PRIORITY属性来管理线程的优先级。如果你的DLL具有长时间的运行循环,你可以在循环内使用Delay()函数,并且调节时间间隔,直到 达成期望循环响应与减少的处理器时间之间的平衡。达成期望循环响应与减少的处理器时间之间的平衡。.
注意: 这些线程管理概念对于任何编程环境的程序都是通用的,不仅仅是TestStand, LabVIEW, 或者 LabWindows/CVI.
相关链接: KnowledgeBase 2CQDSTA6: What Can I Do to Improve the Performance of My CVI Application?
附件:
报告日期: 04/10/2003
最近更新: 11/14/2007
文档编号: 2W99J0EV
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.