## TimerEvent

Object Hierarchy | Related C++ Class: TimerEvent

### Inheritance

SIObject

EventInfo

TimerEvent

### Introduced

v5.1

### Description

A TimerEvent represents a system timer and allows you to specify the interval and the delay time at which a timer elapses. Timers in Softimage are independent of the timeline clock and can be used to produce recurrent work accurately. For example, you can implement an autosave mechanism with a TimerEvent.
The TimerEvent object derives from EventInfo and can be managed like a regular Softimage event. Use PluginRegistrar.RegisterTimerEvent to register them and XSIApplication.EventInfos to access them. Timer events can be suspended with muting and resumed by un-muting (see EventInfo.Mute). You can reset a timer with TimerEvent.Reset.
Note: Timer events are based on Windows timers and are processed by Softimage with a low priority. Although they can be set with milliseconds accuracy, timer events can sometimes be delayed due to the current activity of Softimage.

### Methods

IsClassOf | IsEqualTo | Reset |

### Properties

Application | Attributes | Categories | CustomData
Delay | FileName | FullName | Handler
Help | Interval | Language | Mute
Name | NestedObjects | Origin | OriginPath
Parent | Type |  |

### Examples

#### JScript Example

    /*
            This example demonstrates how to register a timer event and to change its
    values.
            To try out this example save it into the Plugins directory
            (User, Factory or Workgroup). Once you have restarted Softimage, the current
            scene will be saved automatically every 15 secs.
            ( You can also load the plug-in without restarting Softimage - see
            XSIApplication.LoadPlugin )
    */
    function XSILoadPlugin( in_reg )
    {
            in_reg.Author = "Softimage SDK Team" ;
            in_reg.Name = "SDK Example - Save scene timer" ;
            in_reg.Major = 1 ;
            in_reg.Minor = 0 ;
            // Register the save scene timer. The timer elapses every 15 secs. (0==no delay)
            in_reg.RegisterTimerEvent( "AutoSaveSceneTimer", 15000, 0 );
            in_reg.RegisterProperty( "AutoSaveProp" );
            in_reg.RegisterMenu( siMenuMainTopLevelID, "Auto Save Demo", true, false );
            return true ;
    }
    function AutoSaveSceneTimer_OnEvent( ctxt )
    {
            // Save current scene
            Application.SaveScene( );
            // Log time
            var strFileName = ActiveProject.ActiveScene.Parameters("Filename").Value;
            var today = new Date();
            var strTime = today.toDateString();
            strTime += ", " + today.toTimeString();
            Application.LogMessage( "<"+strFileName+">" + " saved on " + strTime );
            // Do not mute the timer
            return false;
    }
    function GetAutoSaveProp( )
    {
            var strName = "AutoSaveProp";
            var root = ActiveSceneRoot;
            var prop = root.Properties.Item( strName ) ;
            if ( prop == null )
            {
                    return root.AddProperty( strName );
            }
            else
            {
                    return prop ;
            }
    }
    function AutoSaveDemo_Init( in_ctxt )
    {
            var menu = in_ctxt.source;
            menu.AddCallbackItem( "Launch Auto Save Demo", "ShowAutoSaveProp" );
            return true;
    }
    function ShowAutoSaveProp( )
    {
            InspectObj( GetAutoSaveProp( ), "", "", siLock );
    }
    function AutoSaveProp_Define( ctxt )
    {
            var pset;
            pset = ctxt.Source;
            pset.AddParameter2("Auto_Save_Interval",siInt4,15,0,50,null,null,0,siPersistable);
            pset.AddParameter2("Auto_Save_Delay",siInt4,0,0,50,null,null,0,siPersistable);
            pset.AddParameter2("Auto_Save_Scene",siBool,true,null,null,null,null,0,siPersistable);
            return true;
    }
    function AutoSaveProp_DefineLayout( ctxt )
    {
            var layout,oItem;
            layout = ctxt.Source;
            layout.Clear();
            layout.AddGroup();
            layout.AddItem("Auto_Save_Interval", "Interval (secs)" );
            layout.AddItem("Auto_Save_Delay", "Delay (secs)" );
            layout.EndGroup();
            layout.AddGroup();
            layout.AddRow( );
            layout.AddButton( "Auto_Save_Reset","Reset Timer" ) ;
            layout.AddGroup();
            layout.EndGroup();
            layout.AddItem( "Auto_Save_Scene", "Enable" );
            layout.EndRow( );
            layout.EndGroup();
            return true;
    }
    function AutoSaveProp_OnInit( ctxt )
    {
            var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );
            var p = PPG.Auto_Save_Interval;
            p.Value = evTimer.Interval / 1000;
            p = PPG.Auto_Save_Delay;
            p.Value = evTimer.Delay / 1000;
    }
    //--------------------------------------------------------------------------
    // Reset Timer button callback to restart the Auto Save timer with new values
    //--------------------------------------------------------------------------
    function AutoSaveProp_Auto_Save_Reset_OnClicked()
    {
            var p = PPG.Auto_Save_Interval;
            var interval = p.Value * 1000;
            p = PPG.Auto_Save_Delay;
            var delay = p.Value * 1000;
            var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );
            evTimer.Reset( interval, delay );
            // update the UI
            PPG.Auto_Save_Scene.Value = true;
    }
    //--------------------------------------------------------------------------
    // Start/Stop the AutoSaveSceneTimer timer.
    //--------------------------------------------------------------------------
    function AutoSaveProp_Auto_Save_Scene_OnChanged( )
    {
            var paramVal = PPG.Auto_Save_Scene.Value;
            var evTimer = Application.EventInfos( "AutoSaveSceneTimer" );
            evTimer.Mute = paramVal==false;
    }