PUBLIC oform1 oform1=NEWOBJECT('form1') oform1.Show RETURN ************************************************** *-- Form: form1 (e:\temp\testtimers.scx) *-- ParentClass: form *-- BaseClass: form *-- Time Stamp: 12/28/99 09:26:09 PM * * DEFINE CLASS form1 AS form Top = 0 Left = 0 Height = 250 Width = 375 DoCreate = .T. Caption = 'Form1' WindowState = 0 Name = 'Form1' ADD OBJECT timer1 AS timer WITH ; Top = 10, ; Left = 100, ; Height = 23, ; Width = 23, ; Interval = 1000, ; Name = 'Timer1' ADD OBJECT timer2 AS timer WITH ; Top = 10, ; Left = 140, ; Height = 23, ; Width = 23, ; Interval = 1500, ; Name = 'Timer2' ADD OBJECT edtmessages AS editbox WITH ; Height = 206, ; Left = 10, ; Top = 40, ; Width = 355, ; Name = 'edtMessages' PROCEDURE Init declare Sleep in win32api integer tnMilisecs ENDPROC PROCEDURE Destroy _cliptext = this.edtMessages.value ENDPROC PROCEDURE timer1.Timer thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' Start ' + this.name + CR =sleep(this.interval * 2) thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' End ' + this.name + CR ENDPROC PROCEDURE timer2.Timer thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' Start ' + this.name + CR =sleep(this.interval * 2) thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' End ' + this.name + CR ENDPROC ENDDEFINE * *-- EndDefine: form1 **************************************************Results
77198.18700000001 Start Timer1 77200.19 End Timer1 77200.2 Start Timer2 77203.204 End Timer2 77203.21400000001 Start Timer2 77206.21800000001 End Timer2 77206.21800000001 Start Timer1 77208.22100000001 End Timer1 77208.22100000001 Start Timer1 77210.224 End Timer1 77210.224 Start Timer2 77213.228 End Timer2 77213.228 Start Timer2 77216.23300000001 End Timer2 77216.23300000001 Start Timer2 77219.23700000001 End Timer2 77219.23700000001 Start Timer2 77222.24099999999 End Timer2 77222.24099999999 Start Timer2 77225.246 End Timer2 77225.246 Start Timer2 77228.25 End Timer2 77228.25 Start Timer2 77231.254 End Timer2 77231.254 Start Timer1 77233.257 End Timer1 77233.257 Start Timer1 77235.25999999999 End Timer1 77235.25999999999 Start Timer1 77237.26300000001 End Timer1 77237.26300000001 Start Timer1 77239.266 End Timer1 77239.266 Start Timer1 77241.269 End Timer1 77241.269 Start Timer1 77243.272 End Timer1 77243.272 Start Timer1 77245.274 End Timer1 77245.274 Start Timer1 77247.277 End Timer1 77247.277 Start Timer1 77249.28 End Timer1 77249.28 Start Timer1 77251.283 End Timer1 ...Analysis
local lnInterval local lnInterval lnInterval = this.interval this.interval = 0 thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' Start ' + this.name + CR =sleep(lnInterval * 2) thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' End ' + this.name + CR this.interval = lnIntervalremoves this effect and the following results ensue:
78550.60000000001 Start Timer1 78552.603 End Timer1 78552.613 Start Timer2 78555.618 End Timer2 78555.628 Start Timer2 78558.632 End Timer2 78558.64200000001 Start Timer1 78560.645 End Timer1 78560.655 Start Timer1 78562.658 End Timer1 78562.658 Start Timer1 78564.66100000001 End Timer1 78564.66100000001 Start Timer1 78566.664 End Timer1 78566.664 Start Timer1 78568.666 End Timer1 78568.666 Start Timer1 78570.66899999999 End Timer1 78570.679 Start Timer2 78573.68400000001 End Timer2 78573.694 Start Timer2 78576.698 End Timer2 78576.698 Start Timer2 78579.702 End Timer2 78579.702 Start Timer2 78582.70699999999 End Timer2 78582.70699999999 Start Timer2 78585.711 End Timer2 78585.711 Start Timer2 78588.715 End Timer2 78588.715 Start Timer2 78591.72 End Timer2 78591.72 Start Timer2 78594.724 End Timer2So while one timer event fires (as many times as it is in the queue) the other timer event queues
if thisform.lTimerFiring return endif thisform.lTimerFiring = .t. local lnInterval lnInterval = this.interval this.interval = 0 thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' Start ' + this.name + CR =sleep(lnInterval * 2) thisform.edtMessages.Value = thisform.edtMessages.Value + tran(seconds()) + ' End ' + this.name + CR this.interval = lnInterval thisform.lTimerFiring = .f.Results in
78910.879 Start Timer1 78912.88100000001 End Timer1 78912.891 Start Timer2 78915.89600000001 End Timer2 78915.906 Start Timer2 78918.91 End Timer2 78918.92 Start Timer1 78920.923 End Timer1 78920.933 Start Timer1 78922.936 End Timer1 78922.936 Start Timer1 78924.939 End Timer1 78924.939 Start Timer1 78926.942 End Timer1 78926.942 Start Timer1 78928.94500000001 End Timer1 78928.94500000001 Start Timer1 78930.947 End Timer1 78930.95699999999 Start Timer2 78933.962 End Timer2 78933.962 Start Timer2 78936.976 End Timer2 78936.976 Start Timer2 78939.98 End Timer2 78939.98 Start Timer2 78942.985 End Timer2 78942.985 Start Timer2 78945.989 End Timer2 78945.989 Start Timer2 78948.993 End Timer2 78948.993 Start Timer2 78951.99800000001 End Timer2 78951.99800000001 Start Timer2 78955.00200000001 End Timer2Note that this makes no difference as the requests are queued so the form's property is not evealuated when the timer is supposed to fire, just when it does fire (ie it's turn in the queue comes along)