Thanks, Thomas. The answer to most of your questions is that I'm very new at this!
I'm asking this on the forums you suggested. - Paul On Thu, 01 Jul 2010 19:23:53 +0200, Thomas Jollans <tho...@jollans.com> wrote: >On 06/30/2010 09:28 PM, p...@mail.python.org wrote: >> I have a problem with threading using the Python/C API. I have an >> extension that implements a timer, and the C++ timer callback function >> calls a Python function. The relevant code looks like this: >> >> [snip] >> >> static void CALLBACK PeriodicTimer(UINT wTimerID, UINT msg, >> DWORD dwUser, DWORD dw1, DWORD dw2) > >This looks frightfully WIN32. How are you calling a timer? I'm guessing >you're using some win32 function. So my tentative tip on where the >problem might lie is the interaction of Python's PyThreads and the win32 >threading primitives you're probably calling. > >> { >> PyGILState_STATE pgs; >> >> pgs = PyGILState_Ensure(); >> if(attrsetFlag) >> { >> pres = PyObject_CallFunction(attr,NULL); >> if( pres == NULL )printf("CallFunction failed!\n"); >> } >> PyGILState_Release( pgs ); >> >> } >> >> The Python code that sets this up looks like this: >> >> fetimer.setmodname("Timeslice3") >> fetimer.setprocname("Timetester") > >I'm sure this isn't the problem, but why aren't you just passing in an >object? As in fetimer.setcallable(Timeslice3.Timetester)? > >> [ snip ] >> >> Fatal Python Error: This thread state must be current when releasing >> >> Fatal Python Error: PyThreadState_DeleteCurrent: no current tstate >> >> Fatal Python Error: PyEval_SaveThread: NULL tstate > >As I said, I'd expect there to be some irregularities between what >PyThreads would normally do and what you're doing in the code you didn't >post. > >> >> Can anybody help me make this code stable, so that it works all the >> time? > >I can't really help you - I have limited experience with the C API, let >alone Python/C threading, and know next to nothing about Windows >programming. Maybe you should ask in a more specialized (and quieter) >forum, such as the CAPI-SIG mailing list, or python-win32. > >-- Thomas -- http://mail.python.org/mailman/listinfo/python-list