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. Kent On Apr 23, 6:16 am, Carl Banks <pavlovevide...@gmail.com> wrote: > On Apr 22, 5:34 pm, Lie Ryan <lie.1...@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 -- http://mail.python.org/mailman/listinfo/python-list