event loop problem
alex116321 at my-deja.com
alex116321 at my-deja.com
Tue Oct 24 11:40:57 EDT 2000
More information about the Python-list mailing list
Tue Oct 24 11:40:57 EDT 2000
- Previous message (by thread): BUG compiling Python 2.0 with dinamic modules in Solaris, with GCC
- Next message (by thread): event loop problem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Thanks for the info Geoff. My program works fine now. Alex In article <mailman.972333065.14276.python-list at python.org>, Geoff Talvola <gtalvola at NameConnector.com> wrote: > I know exactly the problem you're talking about -- and I consider it a huge > design flaw in NT that any one application can cause other applications to > hang if it's not processing its message loop. Starting up PythonWin is > another example of something you can't do if any program isn't processing > its messages. > > There are 2 solutions I can think of. First of all, win32all already > contains a function that can process all waiting messages: > win32gui.PumpWaitingMessages() inserted into your while loop should do the > trick. > > But a better solution is to tell win32com to run in free-threading mode, in > which case it doesn't create a hidden window and everything works fine > without having to process messages. To do this, add the following lines > BEFORE you import win32com: > > import sys > sys.coinit_flags = 0 > > and if you are using multiple threads, each thread besides the main thread > should call > > pythoncom.CoInitializeEx(pythoncom.COINIT_MULTITHREADED) > > when they are initialized, and > > pythoncom.CoUninitialize() > > when they exit. If you're not using multiple threads, you don't need the > CoInitializeEx and CoUninitialize. > > See the excellent book Python Programming on Win32 if you need more > details. > > alex116321 at my-deja.com wrote: > > > I am trying to write a simple Python script which which uses ADO > > through Python's COM extension but never exit. For this I have writen > > a simple while loop however this causes a problem on Windows NT. > > Sometimes other windows on NT broadcast messages which need to be > > confirmed by all running windows. If at least one window does not > > dispatch the confirmation, the broadcaster will hang. In C++ the > > solution is to make the main event loop listen for windows messages, > > for example: > > > > while(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)) { > > TranslateMessage(&msg); > > DispatchMessage(&msg); > > } > > > > However, I cannot seem to find an equivalence in Python except to use > > Tkinter and use the mainloop function. Unfortunately, I do not require > > any graphics in my program. This is my Python script: > > > > ###################################################### > > import time, win32com.client > > > > # Dispatch Microsoft ActiveX Data Objects (ADO) > > rset = win32com.client.Dispatch("ADODB.RecordSet") > > > > query = "select cAFUserAccountP from Person" > > dbstring = "DRIVER={SQL Server};SERVER=svr-tor- > > dev;DATABASE=SMS_HP_1.2.0;UID=sa;PWD=" > > > > rset.Open(query, dbstring) > > rset.Close() > > > > while 1: > > time.sleep(0.01) > > > > ########################################################## > > > > While this script is running, try setting the time through the windows > > Date/Time Properties window. The window will get stuck until the > > python script is killed. This is because it tries to broadcast a > > message but the python application window does not respond. Actually, > > ADO opens a hidden window and causes this problem. If ADO is not used, > > no problem exists. Any help would be greatly appreciated. > > -- > > - Geoff Talvola > Parlance Corporation > gtalvola at NameConnector.com > > Sent via Deja.com http://www.deja.com/ Before you buy.
- Previous message (by thread): BUG compiling Python 2.0 with dinamic modules in Solaris, with GCC
- Next message (by thread): event loop problem
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list