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]
