Jump to content

While loop: Difference between revisions

From LabVIEW Wiki
m Q moved page Functions Palette/Programming/Structures/While Loop to While Loop structure: Renaming to make it more in line with other palette items.
m Logmanoriginal moved page While Loop structure to While loop: Only the first word in a title should start with a capital letter
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
{{TOCright}}
{{LabVIEW Palette Object Information|palette=Functions Palette/Programming/Structures{{!}}Structures palette|type=structure|icon=Functions Palette - Programming - Structures - While Loop.png}}
[[File:While Loop - Components.png|thumb|Components of a While Loop]]
[[File:While Loop - Components.png|thumb|Components of a While Loop]]


A While Loop is a primitive [[Functions Palette/Programming/Structures|structure]] that repeats the code within its [[Subdiagram|subdiagram]] until a [[Boolean]] condition is met. The code within its subdiagram is executed at least once. It runs endlessly if the condition is not met.
A '''While Loop''' is a primitive [[Functions Palette/Programming/Structures|structure]] that repeats the code within its [[Subdiagram|subdiagram]] until a [[Boolean]] condition is met. The code within its subdiagram is executed at least once. It runs endlessly if the condition is not met.


<br clear="all">
== Usage ==
== Boolean condition ==
=== Boolean condition ===


[[File:While Loop - Conditional Terminal - Right Click Menu.png|thumb|Conditional terminal right-click menu]]
[[File:While Loop - Conditional Terminal - Right Click Menu.png|thumb|Conditional terminal right-click menu]]
Line 26: Line 28:
A loop that never meets its condition is called an [[#Infinite loop|infinite loop]].
A loop that never meets its condition is called an [[#Infinite loop|infinite loop]].


<br clear="all">
=== Infinite loop ===
== Infinite loop ==


An infinite loop is a loop where the stop condition is never met. The simplest form of infinite loop is achieved by wiring a [[File:BooleanFalse2010.png|frameless|border|False]] constant to the conditional terminal.
An infinite loop is a loop where the stop condition is never met. The simplest form of infinite loop is achieved by wiring a [[File:BooleanFalse2010.png|frameless|border|False]] constant to the conditional terminal.
Line 38: Line 39:
Infinite loops will never stop and can cause a program to be unresponsive to user input. Most cases of infinite loops are not intentional and the result of bugs. A typical mistake is wiring a Boolean value from outside the loop to the conditional terminal. Since input tunnels are evaluated ''before'' the first iteration, the Boolean value always stays the same. This causes the While Loop to execute its subdiagram exactly once if the Boolean value is [[File:BooleanTrue2010.png|frameless|border|True]] and endlessly if the Boolean value is [[File:BooleanFalse2010.png|frameless|border|False]].
Infinite loops will never stop and can cause a program to be unresponsive to user input. Most cases of infinite loops are not intentional and the result of bugs. A typical mistake is wiring a Boolean value from outside the loop to the conditional terminal. Since input tunnels are evaluated ''before'' the first iteration, the Boolean value always stays the same. This causes the While Loop to execute its subdiagram exactly once if the Boolean value is [[File:BooleanTrue2010.png|frameless|border|True]] and endlessly if the Boolean value is [[File:BooleanFalse2010.png|frameless|border|False]].


<br clear="all">
=== Execution speed ===
== Execution speed ==


While Loops execute as fast as possible and therefore can be a cause for high [[Wikipedia:CPU|CPU]] load. For this reason While Loops should be throttled by using the [[Functions Palette/Programming/Timing/Wait (ms)|Wait (ms)]] function with a delay time that is appropriate for the task.
While Loops execute as fast as possible and therefore can be a cause for high [[Wikipedia:CPU|CPU]] load. For this reason While Loops should be throttled by using the [[Functions Palette/Programming/Timing/Wait (ms)|Wait (ms)]] function with a delay time that is appropriate for the task.
Line 49: Line 49:
Note that limiting the execution speed does '''not''' guarantee that the loop is executed at exact intervals. The loop can still execute slower if the code takes longer to execute, or the [[Wikipedia:Operating system|operating system]] pauses execution. Use [[Functions Palette/Programming/Structures/Timed Structures/Timed Loop|Timed Loops]] for time-critical tasks.
Note that limiting the execution speed does '''not''' guarantee that the loop is executed at exact intervals. The loop can still execute slower if the code takes longer to execute, or the [[Wikipedia:Operating system|operating system]] pauses execution. Use [[Functions Palette/Programming/Structures/Timed Structures/Timed Loop|Timed Loops]] for time-critical tasks.


== Nomenclature controversy ==
=== Nomenclature controversy ===


Strictly speaking the While Loop is a [[Wikipedia:Do while loop|Do While Loop]], because the stop condition is checked at the end of a loop, which requires the subdiagram to execute at least once. A "real" While Loop, however, would first check the stop condition and execute the subdiagram only if the condition is not met. This can be confusing to programmers that are familiar with other programming languages and that are new to LabVIEW.
Strictly speaking the While Loop is a [[Wikipedia:Do while loop|Do While Loop]], because the stop condition is checked at the end of a loop, which requires the subdiagram to execute at least once. A "real" While Loop, however, would first check the stop condition and execute the subdiagram only if the condition is not met. This can be confusing to programmers that are familiar with other programming languages and that are new to LabVIEW.
Line 61: Line 61:


* Wire an [[error cluster]] to the conditional terminal to terminate the loop on an error.
* Wire an [[error cluster]] to the conditional terminal to terminate the loop on an error.
== History ==
{{ambox|text=History information is needed.  What changes have occurred over previous versions?}}
{| class="wikitable"
! Version
! Change(s)
|-
|[[File:LV2018.png|frameless|border|64x64px|LabVIEW 2018|link=LabVIEW 2018]]
|More info to come.
|}


== See also ==
== See also ==
* [[WhileLoop class]]
* [[WhileLoop class]]
* [[Functions Palette/Programming/Structures/Timed Structures/Timed Loop|Timed Loops]]
* [[Timed Loop structure|Timed Loops]]
 
== External Links ==
{{ambox|text=Add links to external resources that would also help.}}


[[Category:Structures Palette]]
[[Category:Structures Palette]]
[[Category:While Loop]]
[[Category:While Loop]]

Latest revision as of 15:01, 7 May 2023

Object information
Owning palette(s) Structures palette
Type Structure
Requires Basic Development Environment
Icon
Components of a While Loop

A While Loop is a primitive structure that repeats the code within its subdiagram until a Boolean condition is met. The code within its subdiagram is executed at least once. It runs endlessly if the condition is not met.

Usage

Boolean condition

Conditional terminal right-click menu

A Boolean value must be connected to the conditional terminal Conditional Terminal of the loop. The condition can be changed at the conditional terminal, via the right-click menu options "Stop if True" and "Continue if True", or by clicking on the terminal.

Icon Condition Description
Stop if True Stop if True (default) Stops if the Boolean condition is True
Continue if True Continue if True Stops if the Boolean condition is False

A loop that never meets its condition is called an infinite loop.

Infinite loop

An infinite loop is a loop where the stop condition is never met. The simplest form of infinite loop is achieved by wiring a False constant to the conditional terminal.


A common reason for infinite loops: Wiring Boolean values from outside the loop

Infinite loops will never stop and can cause a program to be unresponsive to user input. Most cases of infinite loops are not intentional and the result of bugs. A typical mistake is wiring a Boolean value from outside the loop to the conditional terminal. Since input tunnels are evaluated before the first iteration, the Boolean value always stays the same. This causes the While Loop to execute its subdiagram exactly once if the Boolean value is True and endlessly if the Boolean value is False.

Execution speed

While Loops execute as fast as possible and therefore can be a cause for high CPU load. For this reason While Loops should be throttled by using the Wait (ms) function with a delay time that is appropriate for the task.

The delay can be set to 0 ms, which makes the loop execute as fast as possible without clogging the CPU.

Note that limiting the execution speed does not guarantee that the loop is executed at exact intervals. The loop can still execute slower if the code takes longer to execute, or the operating system pauses execution. Use Timed Loops for time-critical tasks.

Nomenclature controversy

Strictly speaking the While Loop is a Do While Loop, because the stop condition is checked at the end of a loop, which requires the subdiagram to execute at least once. A "real" While Loop, however, would first check the stop condition and execute the subdiagram only if the condition is not met. This can be confusing to programmers that are familiar with other programming languages and that are new to LabVIEW.

Best practice

  • Use For Loops if the number of iterations is predictable or can be calculated.
  • Use Wait (ms) to limit the execution speed of a While Loop.

Tips and tricks

  • Wire an error cluster to the conditional terminal to terminate the loop on an error.

History

Version Change(s)
LabVIEW 2018 More info to come.

See also

External Links