On 9/30/10 10:24 AM, John Fabiani wrote:
> On Wednesday, September 29, 2010 10:15:24 pm Paul McNett wrote:
>> dabo Commit
>> Revision 6038
>> Date: 2010-09-29 22:15:23 -0700 (Wed, 29 Sep 2010)
>> Author: Paul
>> Trac: http://trac.dabodev.com/changeset/6038
>>
>> Changed:
>> U   trunk/dabo/dReportWriter.py
>> U   trunk/dabo/ui/uiwx/__init__.py
>>
>> Log:
>> Ever since introducing the report progress bar, I've received about 3 error
>> logs from customers per month with the 'wx.Yield called recursively' error,
>> and I've never been able to reproduce it on my end.
>>
>> I did some Googling, and someone in May found a workaround that solved the
>> problem for him. I've added a _safe=False argument to dabo.ui.yieldUI: when
>> True, the new code is run. I changed the yieldUI() calls from dReportWriter
>> to yieldUI(_safe=True) to test it in the field. It doesn't seem to break
>> anything. I wanted to keep the argument "private" for now until it has a
>> track record, at which point it'll probably become the default code for
>> yieldUI().
>>
>> Here's the link to the article I got the code from:
>> http://www.python-forum.org/pythonforum/viewtopic.php?f=4&t=18801
>>
>>
>>
>> Diff:
>> Modified: trunk/dabo/dReportWriter.py
>> ===================================================================
>> --- trunk/dabo/dReportWriter.py      2010-09-27 00:36:01 UTC (rev 6037)
>> +++ trunk/dabo/dReportWriter.py      2010-09-30 05:15:23 UTC (rev 6038)
>> @@ -54,14 +54,14 @@
>>              win = self.ProgressControl
>>              if win:
>>                      win.updateProgress(self.RecordNumber+1, 
>> len(self.Cursor))
>> -                    dabo.ui.yieldUI()
>> +                    dabo.ui.yieldUI(_safe=True)
>>
>>      def _hideProgress(self):
>>              win = self.ProgressControl
>>              if win:
>>                      win.hide()
>>                      win.Form.fitToSizer()
>> -                    dabo.ui.yieldUI()
>> +                    dabo.ui.yieldUI(_safe=True)
>>
>>      def _getEncoding(self):
>>              try:
>>
>> Modified: trunk/dabo/ui/uiwx/__init__.py
>> ===================================================================
>> --- trunk/dabo/ui/uiwx/__init__.py   2010-09-27 00:36:01 UTC (rev 6037)
>> +++ trunk/dabo/ui/uiwx/__init__.py   2010-09-30 05:15:23 UTC (rev 6038)
>> @@ -324,9 +324,14 @@
>>      return ret
>>
>>
>> -def yieldUI(*args, **kwargs):
>> +def yieldUI(_safe=False, *args, **kwargs):
>>      """Yield to other apps/messages."""
>> -    wx.Yield(*args, **kwargs)
>> +    if _safe:
>> +            while wx.GetApp().Pending():
>> +                    wx.GetApp().Dispatch()
>> +                    wx.GetApp().Yield(True)
>> +    else:
>> +            wx.Yield(*args, **kwargs)
>>
>>
>>   def beep():
> Have you tested on Linux?  I have/had major issues with yield() working just
> fine on windows and just locking up on linux.  BTW the reason for using yield
> was to allow a simple way to stop printing (or producing output).  So maybe
> you can find an universal way to stop the output from reports.
Why not just spawn a new thread to handle the report generation and have 
a cancel semaphore?

Regards,

Nate

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: http://leafe.com/archives/byMID/[email protected]

Reply via email to