On Mar 29, 2007, at 12:26 PM, Charles Yeomans wrote:

> On Mar 29, 2007, at 2:51 PM, Tim Jones wrote:
>
>> On Mar 29, 2007, at 9:33 AM, [EMAIL PROTECTED] wrote:
>>
>>> On Mar 29, 2007, at 15:40 UTC, Peter K. Stys wrote:
>>>
>>>> At the same time, most often i want to run a batch operation like
>>>> John, and all i want is the progressBar or a staticText value to be
>>>> updated.  So I use App.DoEvents, with no obvious issues.
>>>
>>> Ow!  Reminds me of the guys driving down the freeway at 80MPH on
>>> motorcycles without helmets.  They haven't run into any obvious
>>> issues
>>> yet either.
>>
>> We keep hearing about the potential hazards of using App.DoEvents(),
>> but no hard factual evidence.  How about an example that demonstrates
>> an obvious issue?  Granted, I've worn a helmet since I was 5 riding
>> on the back of my cousin's minibike - and will continue to wear one
>> even though AZ does require it), but I haven't hit any "issues" there
>> either that made the helmet more than an obstacle to my vision...  If
>> you want to use analogies, this FUD about App.DoEvents() feels sort
>> of like scaring teens that have never had sex with STD stories.
>
> I have firsthand experience with refactoring applications that used
> App.DoEvents to make them reliable.  I've seen the problems with
> reentrant behavior, locking up, etc. that were present.  I worry also
> that RS is using DoEvents under the hood with sockets, given that I
> experienced significant problems with unexpected reentrancy and
> application hangs in the interaction of sockets and the ODBC plugin.

Again, a nice description, but nothing that I can look at and say  
"yep - that's a real problem when I run it".  Remember, your mom  
warned you about "those girls" when you were 14, also.  And "those  
girls" turned out to be the most fun ;-/

I guess that I should also add that I use booleans in my operations  
that could be clobbered by unexpected re-entrant calls (sockets,  
shells, and a few self-built looping methods) to prevent the loop  
from being entered if it was already running - in pseudocode:

If Not theControlIsActive Then
   theControlIsActive = True
   // do the loop stuff
   theControlIs Active = False
Else
   Return
End If

(The return isn't really necessary, but it keeps the code clean)  So  
this may be another reason that I've not had to test my "helmet" :-).

[SNIP about Modal Window]

>> Also, a Pause() function would be handy

[SNIP]

> Use App.SleepCurrentThread.

Okay - just tried this and a simple thread that counts to 1000 that  
is a child of the parent window pauses for the 2 seconds that I've  
instructed SleepCurrentThread() to wait in a Do -- Loop.

Window1.Open:
thLoop.Run
Do
   App.SleepCurrentThread(2000)
Done

thLoop.Run:
   Dim i As Integer
   Do
     i = i + 1
     Window1.Statictext1.Text = "Loop is at " + Str(i)
   Loop Until i >=1001

That doesn't seem to be the answer.

>> I would love to have an alternative to App.DoEvents() that worked
>> consistently, but until then, as long as you're working in a top-down
>> code flow as Peter and I apparently do, App.DoEvents() is all we've
>> got.
>
> You have alternatives to App.DoEvents that work consistenly - they're
> called "threads".  If you're thinking in terms of "top-down code
> flow", then I think you'll always be fighting against the Rb app
> framework.

And, as mentioned previously, the reasons for controlling flow  
through certain operations seems to lie in a no-man's land where the  
Thread allows the GUI to update, but also allows the user to do  
things that could otherwise be detrimental to the completion of those  
operations.  And, using a modal window to block the user appears to  
also block the thread (in some, unexpected situations)... this is why  
I like Peter's note about a new function that would simply update the  
various controls displayed without any re-entrant issues such as  
polling the event queue.

Ah well, I understand reentrancy issues and why you and RS would be  
concerned, but I also know what we're trying to accomplish that can't  
apparently be done with the current functionality provided.


_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives:
<http://support.realsoftware.com/listarchives/lists.html>

Reply via email to