WINXP vs. LINUX in threading.Thread
kent.yuan at gmail.com
Thu Apr 23 11:43:17 CEST 2009
Thanx you guys.
Now my program is working.
I used the Thread subclass. and at the end of the run method, i call
wx.CallAfter(mainFrame.somefunction, para) to show the dialog or
change some text. I tested in winxp&linux. both worked.
On Apr 23, 6:16 am, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Apr 22, 5:34 pm, Lie Ryan <lie.1... at gmail.com> wrote:
> > Diez B. Roggisch wrote:
> > > Kent schrieb:
> > >> hello all,
> > >> i want to add a "new update notification" feature to my wxPython appl.
> > >> The codes below do the job. The logic is simple enough, I don't think
> > >> it needs to be explained.
> > >> since sometimes, under windows, proxy setting was a script. and was
> > >> set in IE. In this case, connecting to the HTML will take relative
> > >> long time. I therefore run the following codes in a new Thread
> > >> (subclass of threading.Thread), so that user don't have to wait during
> > >> the version checking period.
> > >> Under Linux, it worked smoothly. But under Windows XP, it didn't. If
> > >> there was new updates, the notification dialog can show, but no text,
> > >> icon, .... on it. Then, the whole application didn't response any
> > >> longer. :( I have to force stop the application process.
> > >> where is the problem?
> > > GUI-toolkits and threads usually are not a good idea (Qt4 being an
> > > exception to that rule, at least they claim that). Google wxPython +
> > > threading for answers how to solve this - essentially, you need to
> > > create a timer or event-based solution that allows your
> > > background-thread to inject a status message to the main eventloop.
> > > Diez
> > You should use the GUI toolkit's own event loop for threading. An event
> > loop is some sort of cooperative multithreading mechanism,
> The function in question, gethostbyname, isn't cooperating, though.
> It blocks for a substantial amount of time from an event handler,
> freezing the application.
> > if you used
> > the threading mechanism from the threading library, there will be two
> > conflicting threading mechanism, resulting in many hard-to-predict
> > situation if you're not careful. The wxYield mechanism is much easier
> > option than multithreading.
> The problem is, during most of the delay wxYield can't be called
> becaust the function gethostbyname is blocking.
> I think Diez is correct. To avoid the freeze, one should spawn a
> thread, and when it completes it should notify the GUI thread by
> pushing an event or scheduling an idle call. Functions that do that
> are usually thread-safe. (A permanent worker thread might be better
> but it would involve a lot more synchronization.)
> Carl Banks
More information about the Python-list