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