Hi :)

I have a main() function of my app which intializes the Python
Interpreter and some other stuff. When I am finished I call:

PyGILState state = PyGILState_Ensure()
//call PyRun_String()
PyGILStateRelease(state);

The first question is, I found out the API contains other commands lik
PyEval_AcquireLock(). I don't really understand if I have to use them
too, could anyone explain? Thanks.

Okay, back to topic. In PyRun_String() I call a wrapped function. This
wrapped function does some internal calculations and takes a pointer
to another function which is called in another thread while it
calculates the stuff.

void MyProgressbar(Real p, void* hook) // this function wil be called
in another thread
{
        PyGILState_STATE gilstate = PyGILState_Ensure();

        PyObject* func = (PyObject*)hook;
        //do some python stuff

        PyGILState_Release(gilstate)
}

PyObject *pyMyFunction(PyObject *pSelf, PyObject *args, PyObject
*keywords)
{
        static char *kwlist[] = {"hook", NULL};

        PyObject  *hook=NULL;

        if (!PyArg_ParseTupleAndKeywords(args, keywords, "O!", kwlist,
&PyFunction_Type, &hook))
                return NULL;

        LONG ok = MyFunction(myprogress, hook);   //hook is a pointer which
is passed to the threaded function.

        Py_RETURN_INT(ok);
}

I want to do the same in Python. I want to pass a reference of a
function to the function which is called from the other thread. But it
stops (not crash) here: PyGILState_STATE gilstate = PyGILState_Ensure
();



What can I do? Thank you very much.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to