Creating timers using the setInterval() method
The following example shows how you can execute methods at regular intervals using the setInterval() method. It also shows how you can stop the methods from being executed by calling the clearInterval() method and passing the interval’s unique id returned from the setInterval() method.
Full code after the jump.
It is important to note that the setInterval() method will cause the method to be called continuously until the clearInterval() method is called. If you only want the method to be called once after a delay, you can use the setTimeout() method, or Timer class.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/02/14/creating-timers-using-the-setinterval-method/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridColumn;
private var interval:uint;
private function startInt():void {
interval = setInterval(getTime, 1000); // 1 second
startButton.enabled = false;
stopButton.enabled = true;
}
private function stopInt():void {
if (interval) {
clearInterval(interval);
Alert.show("Interval stopped.");
startButton.enabled = true;
stopButton.enabled = false;
}
}
private function getTime():void {
arrColl.addItemAt({date:new Date(), timer:getTimer()}, 0);
}
private function date_labelFunc(item:Object, col:DataGridColumn):String {
var dat:Date = item.date as Date;
return dat.toTimeString();
}
private function timer_labelFunc(item:Object, col:DataGridColumn):String {
return numberFormatter.format(item.timer);
}
]]>
</mx:Script>
<mx:NumberFormatter id="numberFormatter"
useThousandsSeparator="true" />
<mx:ArrayCollection id="arrColl" />
<mx:ApplicationControlBar dock="true">
<mx:Button id="startButton"
label="start interval"
click="startInt();" />
<mx:Button id="stopButton"
label="stop interval"
enabled="false"
click="stopInt();" />
</mx:ApplicationControlBar>
<mx:DataGrid id="list"
dataProvider="{arrColl}"
verticalScrollPolicy="on"
width="300">
<mx:columns>
<mx:DataGridColumn dataField="date"
headerText="date:"
labelFunction="date_labelFunc"
width="200" />
<mx:DataGridColumn dataField="timer"
headerText="timer (ms):"
labelFunction="timer_labelFunc"
textAlign="right"
width="100" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
View source is enabled in the following example.
Of course, that is a relatively simple example. If you want to get slightly more complex, you can pass additional parameters to the setInterval() method which will get passed along to your specified method. In the following example, we pass two parameters to our getTime() method. The first parameter is a simple String object (“peter”) and the second parameter is an int returned from the getTimer() method. It is important to note that the getTimer() being passed to the custom getTime() method via setInterval() is only called once, not on every iteration of the interval.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/02/14/creating-timers-using-the-setinterval-method/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridColumn;
private var interval:uint;
private function startInt():void {
interval = setInterval(getTime, 1000, "peter", getTimer());
startButton.enabled = false;
stopButton.enabled = true;
}
private function stopInt():void {
if (interval) {
clearInterval(interval);
Alert.show("Interval stopped.");
startButton.enabled = true;
stopButton.enabled = false;
}
}
private function getTime(param1:*, param2:*):void {
arrColl.addItemAt({date:new Date(), p1:param1, p2:param2, timer:getTimer()}, 0);
}
private function date_labelFunc(item:Object, col:DataGridColumn):String {
var dat:Date = item.date as Date;
return dat.toTimeString();
}
private function timer_labelFunc(item:Object, col:DataGridColumn):String {
return numberFormatter.format(item[col.dataField]);
}
private function diff_labelFunc(item:Object, col:DataGridColumn):String {
return ((item.timer - item.p2) / 1000).toFixed(2);
}
]]>
</mx:Script>
<mx:NumberFormatter id="numberFormatter"
useThousandsSeparator="true" />
<mx:ArrayCollection id="arrColl" />
<mx:ApplicationControlBar dock="true">
<mx:Button id="startButton"
label="start interval"
click="startInt();" />
<mx:Button id="stopButton"
label="stop interval"
enabled="false"
click="stopInt();" />
</mx:ApplicationControlBar>
<mx:DataGrid id="list"
dataProvider="{arrColl}"
verticalScrollPolicy="on"
width="100%">
<mx:columns>
<mx:DataGridColumn dataField="date"
headerText="date:"
labelFunction="date_labelFunc"
width="200" />
<mx:DataGridColumn dataField="timer"
headerText="timer (ms):"
labelFunction="timer_labelFunc"
textAlign="right"
width="100" />
<mx:DataGridColumn dataField="p1"
headerText="name:"
width="100" />
<mx:DataGridColumn dataField="p2"
headerText="start (ms):"
labelFunction="timer_labelFunc"
textAlign="right"
width="100" />
<mx:DataGridColumn headerText="diff (sec):"
labelFunction="diff_labelFunc"
textAlign="right"
width="100" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
View source is enabled in the following example.
Peter deHaan
Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.
-
Add Widgets (Content Sidebar)
This is your Content Sidebar. Edit this content that appears here in the widgets panel by adding or removing widgets in the Content Sidebar area.
0 Responses to Creating timers using the setInterval() method
Leave a Reply Cancel reply
-
Categories
- Accordion
- AccordionHeader
- ActionScript
- AddChild
- AdvancedDataGrid
- Alert
- alpha
- Animate
- AnimateProperties
- Application
- Application (Spark)
- ArrayCollection
- BarChart
- baseColor
- beta
- beta1
- beta2
- Bitmap
- Bitmap/BitmapData
- BitmapData
- BitmapFill
- BitmapFill (Spark)
- BitmapGraphic
- BitmapImage
- BitmapImage (Spark)
- BitmapImageResizeMode
- Border (Spark)
- BorderContainer (Spark)
- Box
- BuildInfo
- Button
- Button (Spark)
- ButtonBar
- ButtonBar (Spark)
- ByteArray
- Camera
- Charting
- CheckBox
- CheckBox (Spark)
- ClassFactory
- CollectionEvent
- Color
- ColorPicker
- ColorUtil
- ComboBox
- ComboBoxArrowSkin
- Compiler
- Component
- Component (Spark)
- Configuration
- Container
- ContextMenu
- ContextMenuEvent
- ContextMenuItem
- CSSCondition
- CSSSelector
- CSSStyleDeclaration
- CurrencyFormatter
- CursorManager
- Data Binding
- DataGrid
- DataGrid (Spark)
- DataGridColumn
- Date
- DateBase
- DateChooser
- DateField
- DateFormatter
- Debugging
- DefaultComplexItemRenderer
- DefaultTileListEffect
- DropDownList
- DropDownList (Spark)
- DropDownListButtonSkin
- DropDownListSkin
- DropShadowFilter
- E4X
- Effects
- Ellipse
- EmailValidator
- Embed
- Event
- Fade
- FileFilter
- FileReference
- fill
- Filters
- Flash
- Flash Integration
- FlashVars
- Flex 3 SDK
- Flex Builder
- Flex Builder 3
- Flex SDK
- Flex4
- FLVPlayback
- FocusManager
- FontLookup
- Fonts
- Form
- Form (Spark)
- FormHeading (Spark)
- FormItem
- FormItem (Spark)
- Forms
- FTETextField (Spark)
- FullScreen
- FullScreenEvent
- FxAnimateColor
- FxButtonBar
- FxCheckBox
- FXG
- FxHScrollBar
- FxHSlider
- FxList
- FxNumericStepper
- FxRadioButton
- FxRotate3D
- FxScroller
- FxTextArea
- FxTextInput
- FxToggleButton
- FxVScrollBar
- FxVSlider
- getStyleDeclaration()
- GradientEntry
- Graphic (Spark)
- HBox
- HDividedBox
- HGroup (Spark)
- HorizontalLayout
- HorizontalList
- HSBColor (Spark)
- HScrollBar (Spark)
- HSlider
- HSlider (Spark)
- HTML template
- ID3Info
- Image
- Image (Spark)
- ImageSnapshot
- itemRenderer
- JointStyle
- Label
- Label (Spark)
- Legend
- LegendItem
- LigatureLevel
- Line
- LinearGradientStroke
- LineScaleMode
- LinkBar
- LinkButton
- List
- List (Spark)
- Menu
- MenuBar
- Metadata
- MetadataEvent
- Model
- Mouse
- MouseCursor
- MouseEvent
- Move
- Namespace
- NavigatorContent (Spark)
- needsSWF
- NetConnection
- NetStream
- Nightly Builds
- NumberBaseRoundType
- NumberFormatter
- NumberValidator
- NumericCompare
- NumericStepper
- NumericStepper (Spark)
- ObjectProxy
- ObjectUtil
- paddingLeft
- paddingRight
- Panel
- Panel (Spark)
- Parallel
- Path
- PieChart
- PieSeries
- PieSeriesItem
- PopUpAnchor (Spark)
- PopUpButton
- PopUpManager
- ProgrammaticSkin
- ProgressBar
- PropertyChangeEvent
- QName
- RadialGradient
- RadioButton
- RadioButton (Spark)
- RadioButtonGroup
- RadioButtonGroup (Spark)
- Rect
- RegExp
- Regular Expressions
- Repeater
- RichEditableText
- RichText
- RichText (Spark)
- RichTextEditor
- Rotate
- Rotate3D (Spark)
- Scroller (Spark)
- Sequence
- setStyle()
- SimpleText
- SimpleText (Spark)
- skinClass
- Slider
- SliderEvent
- SolidColor
- SolidColorStroke
- Sort
- SortField
- Sound
- SoundEffect
- Spinner (Spark)
- SpriteVisualElement (Spark)
- StageDisplayState
- States
- StringUtil
- StringValidator
- StyleManager
- Styles
- SWFLoader
- SWFObject
- System
- SystemManager
- TabBar
- TabBar (Spark)
- TabNavigator
- TabStopFormat
- Text
- Text Layout Framework (TLF)
- TextArea
- TextArea (Spark)
- TextBox
- TextConverter
- TextEvent
- TextFlow
- TextFlowUtil
- TextFormat
- TextGraphic
- TextInput
- TextInput (Spark)
- TextLayoutFormat
- TextView
- Themes
- TileLayout
- TileList
- TileOrientation
- Timer
- TitleWindow
- TitleWindow (Spark)
- TLF
- ToggleButton (Spark)
- ToggleButtonBar
- ToolTip
- Transition
- Tree
- TruncationOptions
- UIComponent
- UIFTETextField
- Updater
- URLLoader
- URLRequest
- URLUtil
- URLVariables
- ValidationResultEvent
- Validator
- Validators
- VBox
- VDividedBox
- Vector
- VerticalLayout
- VerticalLayout (Spark)
- VGroup (Spark)
- Video
- VideoDisplay
- VideoElement
- VideoElement (Spark)
- VideoEvent
- VideoPlayer (Spark)
- VideoPlayerScrubBar
- ViewStack
- VScrollBar (Spark)
- VSlider
- VSlider (Spark)
- XML
- XMLList
- XMLListCollection
- ZipCodeValidator
- ZipCodeValidatorDomainType
- Zoom
-
Articles
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
-
Meta


Not to rain on your parade, but setInterval() is no longer the recommended way to accomplish this.
Take a look at the timer object
http://livedocs.adobe.com/flex/2/langref/flash/utils/Timer.html
Kevin,
Yep. Good point, I should have mentioned that in my article. The
setInterval()andsetTimeout()methods are considered the “old school” and the new, recommended method is to use the Timer class (which was actually going to be subject of today’s post).Thanks,
Peter
No problem! I really enjoy what you are doing as well! Keep up the good work!
There can never be too many examples in the community!