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 };