while: Difference between revisions
Jump to navigation
Jump to search
(add note about while having no suspension) |
mNo edit summary |
||
Line 44: | Line 44: | ||
}; | }; | ||
} [[forEach]] [[units]] [[group]] unitname;</code> | } [[forEach]] [[units]] [[group]] unitname;</code> | ||
|x3=<sqf> | |x3=<sqf>[] spawn { | ||
//warning! while loop without suspension executes multiple times per frame!!! | //warning! while loop without suspension executes multiple times per frame!!! | ||
private _counter = 0; | private _counter = 0; | ||
private _endTime = diag_tickTime + 5; | private _endTime = diag_tickTime + 5; | ||
private _frameNo = diag_frameNo; | private _frameNo = diag_frameNo; | ||
while {diag_tickTime < _endTime} do { | while {diag_tickTime < _endTime} do { | ||
_counter = _counter + 1; | |||
}; | }; | ||
hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; | hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; | ||
//with suspension | //with suspension | ||
private _counter = 0; | private _counter = 0; | ||
private _endTime = diag_tickTime + 5; | private _endTime = diag_tickTime + 5; | ||
private _frameNo = diag_frameNo; | private _frameNo = diag_frameNo; | ||
while {diag_tickTime < _endTime} do { | while {diag_tickTime < _endTime} do { | ||
_counter = _counter + 1; | |||
uiSleep 0.001; //waits at least 1 frame | |||
}; | }; | ||
hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; | hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; | ||
} | |||
</sqf> | </sqf> | ||
|seealso= [[Control Structures]] [[waitUntil]] [[for]] [[do]] | |seealso= [[Control Structures]] [[waitUntil]] [[for]] [[do]] |
Revision as of 18:25, 24 March 2022
Description
- Description:
- Repeats Code while the given condition is true. A part of while-do construct.
- Groups:
- Program Flow
Syntax
- Syntax:
- while condition
- Parameters:
- condition: Code
- Return Value:
- While Type
Examples
- Example 1:
while {a < b} do {a = a + 1};
- Example 2:
- A practical example: Repair all members of a group to such a level that they are able to stand up:
{ if (alive _x) then { while { not canStand _x } do { _x setDamage (damage _x - 0.01); }; }; } forEach units group unitname;
- Example 3:
- [] spawn { //warning! while loop without suspension executes multiple times per frame!!! private _counter = 0; private _endTime = diag_tickTime + 5; private _frameNo = diag_frameNo; while {diag_tickTime < _endTime} do { _counter = _counter + 1; }; hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; //with suspension private _counter = 0; private _endTime = diag_tickTime + 5; private _frameNo = diag_frameNo; while {diag_tickTime < _endTime} do { _counter = _counter + 1; uiSleep 0.001; //waits at least 1 frame }; hint format ["Average Execution: %1 times per frame", _counter / (diag_frameNo - _frameNo)]; }
Additional Information
- See also:
- Control Structures waitUntil for do
Notes
-
Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
- Posted on May 14, 2008 - 08:40 (UTC)
-
The boolean code that is used to evaluate the while condition can be preceded by code that executes a regular command.
while {_a =_a + 1; _a < 10} do {...}
- Posted on Aug 30, 2014 - 08:12 (UTC)
- In non-scheduled environment, while do loop is limited to 10,000 iterations, after which it exits even if condition is still true. In scheduled environment no such limit exists.
Categories:
- Scripting Commands
- Introduced with Operation Flashpoint version 1.85
- Operation Flashpoint: New Scripting Commands
- Operation Flashpoint: Scripting Commands
- Operation Flashpoint: Elite: Scripting Commands
- ArmA: Armed Assault: Scripting Commands
- Arma 2: Scripting Commands
- Arma 2: Operation Arrowhead: Scripting Commands
- Take On Helicopters: Scripting Commands
- Arma 3: Scripting Commands
- Command Group: Program Flow