|
Forum List • Thread List • Reply • Refresh • New Topic • Search • Previous • Next 1 |
1. qtimer #593 Posted by: 2002-10-24 03:49:12 |
i have a question regarding timers.
Well i can make this
dim whatever(4) as qtimer
so i can setup multiple timers using one variable.. That is nice..
But.. how do i do this:
i want the different timers acces the same code
for example..
whatever.ontimer = thred 4 '(this will not work... but i need to forward something to the sub to determine what to do since i want to use the same code for multiple timers)
sub thred (n as integer)
Tanx again print n
end sub |
2. Re: qtimer #606 |
Seems not possible since ontimer event doesn't pass parameters. Usually, I will use one timer only and call corresponding subs according to a counter variable in the ontimer event handler. The timer interval can be set with the smallest one. This method saves a lot of the resources although looks a little bit un-clean. |
3. qtimer agin! #609 Posted by: 2002-10-25 15:49:37 |
Thanx for the answer...
And I must say my super ideas (hehe) is stopped dead in the tracks. Well, when playing around with timers I found out the biggest limiting factors of them all.. If one of the timers is stuck waiting for something the other timers will not execute. So there is no way that I know to write multi thred QoS programs in rapidq.
As u can see when running the program below timer(0) stopps all other timers (I've put an eternal loop there as u can see)..
dim thred (4) as qtimer dim a as integer dim b as integer dim c as integer declare sub megamega declare sub megamega2 CREATE Form AS QFORM Caption = "Form1" Width = 320 Height = 140 Center CREATE Label1 AS QLABEL Caption = "Label1" Left = 136 Top = 24 Transparent = 1 END CREATE CREATE Label2 AS QLABEL Caption = "Label2" Left = 136 Top = 64 Transparent = 1 END CREATE END CREATE a=0 b=0 c=0 thred(b).interval = 100 thred(b).ontimer = megamega thred(b).enabled = 1 b++ thred(b).interval = 40 thred(b).ontimer = megamega2 thred(b).enabled = 1 Form.ShowModal sub megamega thred(0).enabled = 0 megaloop1: a++ label1.caption = STR$(a) goto megaloop1 end sub sub megamega2 c++ label2.caption = STR$(c) end sub
L8r dudes.
/A |
4. Re: qtimer agin! (I was wrong) #610 Posted by: 2002-10-25 15:58:38 |
I guess it's time for me to crawl back and admit that there is a way to get it all working... And I can't beleve i did'nt think about this 10 minutes ago when I posted my last message. By adding the extremely nice function:doevents I will be able to hand over the task to the other timers pending.
so the timer should look like this and then it works.
sub megamega thred(0).enabled = 0 megaloop1: a++ label1.caption = STR$(a) doevents goto megaloop1 end sub
Tnx again.. |
5. Re: qtimer agin! (I was wrong) #613 Posted by: 2002-10-25 20:27:05 |
But....
There is still one question that I just can't figure out.
How do I define a sub (or maby function) that I can recieve parameters from an 'on event'.
Guidance U sad that this was not possible.
"Seems not possible since ontimer event doesn't pass parameters. Usually, I will use one timer only and call corresponding subs according to a counter variable in the ontimer event handler. The timer interval can be set with the smallest one. This method saves a lot of the resources although looks a little bit un-clean."
But the problem is that I will run code in the timer that several 'root processes' created and each 'child process' (the actual timer code) will be in it's own state using the same code as the other child processes.. so therfore I need to know which 'master process' called the 'child process' in order to determine the correct desitions.
What about: Declare function instead of declare sub ? I've been playing around with that. but no working code yet..
/A |
6. Can't understand your question :( #614 |
? |
7. Re: Can't understand your question :( #615 Posted by: 2002-10-25 23:56:29 |
ok.. I'll make it simple..
I need several qtimers to point at the same code. But inorder to determine what qtimer called the sub I need som kind of handle sent to the sub as well.(since all qtimers point to the same code)..
Tnx
/A |
8. I'm afraid it's not possible. #616 |
You have to dim/create several qtimers since ontimer event doesn't pass parameters. |
9. Re: qtimer #629 Posted by: 2002-11-02 20:15:22 |
Ph4tl4m3R - If I understand you correctly then Tags are your friend.
Try this:
DECLARE SUB Init DECLARE SUB Which (Sender AS QTIMER)
DIM Timers(1 TO 3) AS QTIMER DIM T(1 TO 3) AS LONG
CREATE Form AS QFORM CREATE Box AS QRICHEDIT Align = 5 HideSelection = 0 Font.Name = "Courier New" END CREATE OnShow = Init Center ShowModal END CREATE
SUB Init FOR A = 1 TO 3 Timers(A).Interval = A * 2000 Timers(A).Tag = A Timers(A).OnTimer = Which T(A) = 0 NEXT END SUB
SUB Which (Sender) N = Sender.Tag T(N) = T(N) + N * 2 Box.AddStrings "This is Timer " + STR$(N) + " at " + _ STR$(T(N)) + " seconds" END SUB
|
10. Re: qtimer #630 |
Wow, thanks very much! The doc is wrong! It says OnTimer event has 0 parameter(
). Now, I believe all event handler has at least one parameter -- Sender, no matter what the doc says! Is it true? |
11. Re: qtimer #631 |
Hey, nice addition AEJ !
That might help me aswell ... ^^
Thx ! |
12. Re: qtimer #633 Posted by: 2002-11-04 07:42:42 |
I haven't yet found a situation where Sender doesn't work - I think the docs only refer to compulsory parameters.
Nearly all components have a Tag which can be used in many useful ways from a simple 'identy code', as in my Timer demo but which the automatic TabOrder can do just as well, to things like holding &Hnnnnnn colour values, which can save an awful lot of code at times.
|
13. Re: qtimer #640 Posted by: 2002-11-05 21:57:01 |
Thanx Dude!!!!
This was extremely good information!
/Phat... |
Forum List • Thread List • Reply • Refresh • New Topic • Search • Previous • Next 1 |