1. RE: Let's try that again --was RE: CText

For those following this thread, I've already replied privately to Evan 
but here was my reply.

Evan, given your test examples I can offer the following advice:

Rule number one for writing windows programs: Avoid busy-waiting if at 
all possible.

What's probably happening in the second example is the following:
procedure Display gets called which queues a message to show the CText.  
This message doesn't seem to get processed until after your Activation 
routine.  But you are also hiding your window during Activation so when 
the routine is done, we process both messages at once.  Show/Hide in 
succession looks like it's never shown.

Here's how I would re-write the second example to avoid busy waiting
(the empty for-loop is a delay which is dependent on system speed and
pushes CPU utilization to max.  That's not good.)

Instead, try something like this:

-- test2.exw --
include win32lib.ew

constant
Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)

sequence seq1

seq1= {0,0,5,0,0}

integer int1, d
int1 = 5

setVisible(myCText, False)

procedure Display()
  d = find(int1,seq1)
  if d then
    setVisible(myCText, True)
  end if
end procedure

procedure onTimer_Win( atom id )
  if id = 1 then
    killTimer( Win, id )       -- stop timer
    setVisible(myCText, False) -- show CText
  end if
end procedure
onTimer[Win] = routine_id( "onTimer_Win" )

procedure ClearText()
  Display()
  setTimer( Win, 1, 3000 )  -- 3 second delay
end procedure
onActivate[Win] = routine_id( "ClearText" )

WinMain(Win, Normal)
-- end program --

Hope this helps,
-- Brian


Evan Marshall wrote:
> This works:
> ------------------------------
> include win32lib.ew
> 
> constant
> Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
> myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)
> 
> setVisible(myCText, False)
> 
> procedure Display()
>       setVisible(myCText, True)
> end procedure
> onActivate[Win] = routine_id( "Display" )
> 
> procedure ClearText()
>      setVisible(myCText, False)
> end procedure
> onClick[Win] = routine_id( "ClearText" )
> 
> WinMain(Win, Normal)
> 
> This doesn't:
> --------------------
> 
> include win32lib.ew
> 
> constant
> Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
> myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)
> 
> setVisible(myCText, False)
> 
> procedure Display()
>       setVisible(myCText, True)
> end procedure
> 
> procedure ClearText()
>      Display()
>      for t = 1 to 100000000 do end for
>      setVisible(myCText, False)
> end procedure
> onActivate[Win] = routine_id( "ClearText" )
> 
> WinMain(Win, Normal)

new topic     » topic index » view message » categorize

2. RE: Let's try that again --was RE: CText

Thanks Brian, 
 I was going to change the for loop to a timer in the near future.
I just wasn't sure how to go about setting up and using the Windows timer.  I'll
try that.



12/4/01 4:50:00 PM, Brian Broker <bkb at cnw.com> wrote:

>
>For those following this thread, I've already replied privately to Evan 
>but here was my reply.
>
>Evan, given your test examples I can offer the following advice:
>
>Rule number one for writing windows programs: Avoid busy-waiting if at 
>all possible.
>
>What's probably happening in the second example is the following:
>procedure Display gets called which queues a message to show the CText.  
>This message doesn't seem to get processed until after your Activation 
>routine.  But you are also hiding your window during Activation so when 
>the routine is done, we process both messages at once.  Show/Hide in 
>succession looks like it's never shown.
>
>Here's how I would re-write the second example to avoid busy waiting
>(the empty for-loop is a delay which is dependent on system speed and
>pushes CPU utilization to max.  That's not good.)
>
>Instead, try something like this:
>
>-- test2.exw --
>include win32lib.ew
>
>constant
>Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
>myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)
>
>sequence seq1
>
>seq1= {0,0,5,0,0}
>
>integer int1, d
>int1 = 5
>
>setVisible(myCText, False)
>
>procedure Display()
>  d = find(int1,seq1)
>  if d then
>    setVisible(myCText, True)
>  end if
>end procedure
>
>procedure onTimer_Win( atom id )
>  if id = 1 then
>    killTimer( Win, id )       -- stop timer
>    setVisible(myCText, False) -- show CText
>  end if
>end procedure
>onTimer[Win] = routine_id( "onTimer_Win" )
>
>procedure ClearText()
>  Display()
>  setTimer( Win, 1, 3000 )  -- 3 second delay
>end procedure
>onActivate[Win] = routine_id( "ClearText" )
>
>WinMain(Win, Normal)
>-- end program --
>
>Hope this helps,
>-- Brian
>
>
>Evan Marshall wrote:
>> This works:
>> ------------------------------
>> include win32lib.ew
>> 
>> constant
>> Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
>> myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)
>> 
>> setVisible(myCText, False)
>> 
>> procedure Display()
>>       setVisible(myCText, True)
>> end procedure
>> onActivate[Win] = routine_id( "Display" )
>> 
>> procedure ClearText()
>>      setVisible(myCText, False)
>> end procedure
>> onClick[Win] = routine_id( "ClearText" )
>> 
>> WinMain(Win, Normal)
>> 
>> This doesn't:
>> --------------------
>> 
>> include win32lib.ew
>> 
>> constant
>> Win  = create(Window, "Window", 0, 0, 0, 600, 600, Normal),
>> myCText = create(CText, "This is CText", Win,  250, 200, 100, 15, 0)
>> 
>> setVisible(myCText, False)
>> 
>> procedure Display()
<snip>

>
>
>

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu