Tim Roberts wrote:
Jeff Peery wrote:
Hello,
I'm having trouble catching events from my multi threaded app. I'm
using wxpython and running several threads under the main wxApp
thread. One of the threads creates a COM object for an OPC server. I'm using dispatchWithEvents() to get the COM object. When I do this
the server will post an event to the OnDataChange() method in my
application.
Everything runs wonderfully when I create the COM object within the
main thread (wxApp). However if I create it from within a sub thread
then the OnDataChange is not being called.
My understanding of how multithreaded applications work is basic. I'm
using queue's and threading.locks to safely manage data. However I
don't understand how messages and events are handled in multi threaded
apps with different apartments. The COM object I created is a client
to an OPC server. I suspect the server lives in a different apartment
and that I must handle how messages and events are passed between
different threads/apartments.


Every thread in a Windows application has its own message queue.  If you
create a COM object in a different thread, then its messages will all be
delivered to that thread's queue.  However, wxPython is only responding
to messages on the main thread, where you created the window.

Is there a way you can organize things to create your object in the main
thread?  If not, you need to have a message pump in the second thread
dispatching messages.  I can do that in C, but I honestly don't know how
to do that in Python.

You might ask this question on the wxPython mailing list, although it
may be a bit obscure for them.


I'm probably being naive, but I think using wx.CallAfter or wx.CallLater in combination with pubsub (http://wiki.wxpython.org/PubSub) would be one of the easiest ways to send messages back to your application.

-------------------
Mike Driscoll

Blog:   http://blog.pythonlibrary.org


_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to