DELAY PROCESS(ProcNum;1) seems to delay 2 to 4 ticks [JPR]?
Tony Ringsmuth (4/7/14 11:07AM)
Tony Ringsmuth (4/7/14 11:07 AM)
(I"m hoping that JPR can shed light on this situation)
MY QUESTION:
Is there any way to get a loop to run a few hundred times/second,
while NOT
becoming a processor hog?
THE FULL STORY:
I have a tcp listening process that I'm trying to optimize: Ideally,
I'd
like to cycle some very light code about 300x/second. I'm looking for
the
balance between fast code, but not processor hog.
I discovered that DELAY PROCESS(Current process;1) consistently
actually
delays 2 to 4 ticks, not just one tick. So, a loop such as:
Repeat
`Do Something
=A0Delay process(current process;1)
Until(someCondition)
... Will only run about 15 times/second compiled.
I've tried the following code, compiled in v12.6, 13.4 and 14.0, and
get
similar results in all:
<Begin Code>
//Test Method to see how long DELAY PROCESS(Current process;1) really
delays for
$Log_t:=""
$Tickstart_i:=Tickcount
$Count_i:=0
$LastTick_i:=$Tickstart_i
Repeat
DELAY PROCESS(Current process;1)
$Tick_i:=Tickcount
$Log_t:=$Log_t+String(Tickcount)+Char(9)\
+String($Tick_i-$LastTick_i)+Char(13)
$LastTick_i:=$Tick_i
$Count_i:=$Count_i+1
Until ((Tickcount-$Tickstart_i)>60)
$Log_t:="Count: "+String($Count_i)\
+"\rTick\tTickDiff\r"+$Log_t
SET TEXT TO PASTEBOARD($Log_t)
ALERT($Log_t)
<End Code>
Results:
Count: 20
Tick =A0 TickDiff
36653148 =A0 2
36653152 =A0 4
36653156 =A0 4
36653159 =A0 3
36653163 =A0 4
36653167 =A0 4
36653171 =A0 4
36653174 =A0 3
36653178 =A0 4
36653182 =A0 4
36653186 =A0 4
36653188 =A0 2
36653193 =A0 5
36653195 =A0 2
36653197 =A0 2
36653199 =A0 2
36653201 =A0 2
36653203 =A0 2
36653205 =A0 2
36653207 =A0 2
NOTE 1:
I've attempted to spawn secondary process to un-delay (DELAY
PROCESS(MainProcess;0), in attempts to speed up my listener, to almost
no
benefit. The most I've been able to achieve is about 30 reps/second,
and
not on well balanced time increments.
If I replace DELAY PROCESS(MyProcess;1) with DELAY
PROCESS(MyProcess;0) ,
then my process cycles about 16million times/second, and becomes a
processor
hog.
NOTE 2: Using SET TIMER in a form has similar performance.
--
Tony Ringsmuth
Business Brothers Inc.
763-420-8686
Reply to this message
Summary created 4/7/14 at 12:36PM by Intellex Corporation
Comments welcome at: feedback@intellexcorp.com