Hi,all I try to callback from a thread in C. But it collapsed. I can't figure it out. My test files attached. Thanks.
#include <windows.h> #include "Python.h" #include <stdio.h>
static PyObject *my_callback = NULL; DWORD threadId; HANDLE thread; static PyObject * callback_set_callback(PyObject *dummy, PyObject *args) { PyObject *result = NULL; PyObject *temp; if (PyArg_ParseTuple(args, "O:set_callback", &temp)) { if (!PyCallable_Check(temp)) { PyErr_SetString(PyExc_TypeError, "Must be callable"); return NULL; } my_callback = temp; Py_XINCREF(temp); Py_XDECREF(my_callback); Py_INCREF(Py_None); result = Py_None; } return result; } PyObject* Test() { PyObject *result; PyObject *arglist; int i = 0; for (; i<10; ++i) { printf("Callback from Test()\n"); arglist = Py_BuildValue("(i)", i*i); result = PyEval_CallObject(my_callback, arglist); Py_DECREF(arglist); } return result; } static PyObject * callback_test(PyObject *dummy, PyObject *args) { thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&Test, NULL, 0, &threadId); //FIXME //WaitForMultipleObjects(1, &thread, TRUE, INFINITE); // return Py_BuildValue("b", TRUE); } static PyMethodDef CameraModuleMethods[] = { {"Test", callback_test, METH_NOARGS, "Test"}, {"SetCallback", callback_set_callback, METH_VARARGS, "Set callback func"}, {NULL, NULL, 0, NULL} }; void initCallbackTest(void) { Py_InitModule("CallbackTest", CameraModuleMethods); };
# # usage: python setup.py install # from distutils.core import setup, Extension my_module = Extension("CallbackTest", sources=['callback.c']) setup(name="CallbackTest", version="1.0", ext_modules=[my_module])
import CallbackTest as cb import time def print_msg(long_number): print ">>>>>>>>> " * 3, long_number return True cb.SetCallback(print_msg) cb.Test() time.sleep(1)
-- http://mail.python.org/mailman/listinfo/python-list