1 #timer thread
 2 
 3 #-------以下:用户禁止访问-------
 4 #定时器属性
 5 var TimerHash = 
 6 {
 7     #定时间隔
 8     time     : 1, 
 9     #触发函数
10     trigFunc : nil,
11     #是否取消
12     cancel   : 0,
13     
14     new : func (_time, _trigFunc, _cancel)
15     {
16         return { parents:[TimerHash], 
17                  time     : _time,
18                  trigFunc : _trigFunc,
19                  cancel   : _cancel
20                 };
21     }
22 };
23 
24 
25 #存放所有的定时器
26 var TimerVec = [];
27 
28 
29 #定时器工作线程启动函数
30 var thread_timer_id = 0;
31 
32 var thread_func = func
33 {
34     var id = thread_timer_id;
35     
36     var time1 = systime();
37     var time2 = time1;
38 
39     while(!TimerVec[id].cancel)
40     {
41         time2 = systime();
42         
43         if ((time2 - time1) >= TimerVec[id].time)
44         {
45             time1 = time2;
46             
47             TimerVec[id].trigFunc();
48         }
49     }
50 };
51 
52 
53 #退出FlightGear时,停止所有的定时器
54 var stop_all_timer = func
55 {
56     for (var i = 0; i < size(TimerVec); i += 1)
57     {
58         TimerVec[i].cancel = 1;
59     }
60 };
61 
62 _setlistener("/sim/signals/exit", stop_all_timer);
63 #-------以上:用户禁止访问-------
64 
65 
66 
67 
68 
69 #-------提供给用户使用的定时器类-------
70 var TimerClass = 
71 {
72     #-------以下:用户禁止访问-------
73     id : 0,
74     #-------以上:用户禁止访问-------
75 
76     new : func (_time, _trigFunc)
77     {
78         var tm = TimerHash.new(_time, _trigFunc, 0);
79         append(TimerVec, tm);
80     
81         return { parents  : [TimerClass],
82                  id       : size(TimerVec) - 1 };
83     },
84     
85     start : func 
86     {
87         TimerVec[me.id].cancel = 0;
88         
89         thread_timer_id = me.id;
90         thread.newthread(thread_func);
91     },    
92     
93     stop : func
94     {
95         TimerVec[me.id].cancel = 1;
96     }
97 };