Problems with PyGILState_Ensure () and PyGILState_Release ()
Mathias Mamsch
Domoran at yahoo.de
Mon Aug 16 13:00:08 EDT 2004
Hi Greg, thanks for your answer ...
I really need help with this, because till now I found no solution to my
problem ... I always get FatalErrors, Deadslocks, or protection faults ...
I created some example code for what I want to accomplish. I have a single
thread which calls some C-Function which should call back into python.
To your questions: no nowhere in *my* code ReleaseThread is called and I
dont write to gstate either ...
I dont understand the thread handling of python completely... Any ideas
where - besides the Python docs - I can find some information about that ?
Thanks Mathias Mamsch
here is some example code which produces my problem.
hope it helps to understand it ...
-----------
#include "python.h"
#include <windows.h>
#include <iostream>
using namespace std;
#define GETLOCK PyGILState_STATE gstate; \
gstate = PyGILState_Ensure ();
#define RELEASELOCK PyGILState_Release (gstate);
static DWORD Tid;
static int CHandleFunction ()
{
GETLOCK
// here will I callback to python ...
cout << "Hello" << endl;
RELEASELOCK
return 0;
}
static PyMethodDef SpamMethods[] = {
{NULL, NULL, 0, NULL} /* Sentinel */
};
// some C Thread which calls the Handler ...
DWORD __stdcall WCThread (LPVOID lpThreadParameter)
{
while (1)
{
CHandleFunction();
Sleep(500);
}
}
PyMODINIT_FUNC initkdll(void)
{
Py_InitModule("kdll", SpamMethods);
// Create some C++ Thread for testing purposes
CreateThread(NULL,0,WCThread,NULL,0,&Tid);
}
More information about the Python-list
mailing list