From fe43409d7ac9c2527ab99847fecdace175b3b81d Mon Sep 17 00:00:00 2001 From: necoro <> Date: Sun, 17 Sep 2006 17:22:10 +0000 Subject: Removed our own threading-module ... --- obsolete/geneticthread.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 obsolete/geneticthread.c (limited to 'obsolete') diff --git a/obsolete/geneticthread.c b/obsolete/geneticthread.c new file mode 100644 index 0000000..33520a6 --- /dev/null +++ b/obsolete/geneticthread.c @@ -0,0 +1,62 @@ +/* + * This is a python module implementing real threads. + */ +#include +#include + +/** + * Callback for the thread. Just calls the argument's python function. + */ +static void * thread_cb (void * arg) +{ + PyObject * arglist; + + arglist = Py_BuildValue("()",NULL); + PyEval_CallObject((PyObject*)arg, arglist); + Py_DECREF(arglist); + Py_DECREF((PyObject*)arg); + + return NULL; +} + +/** + * Function called from the python application. + */ +static PyObject * thread_start (PyObject * self, PyObject *args) +{ + PyObject *temp; + pthread_t ID; + + if (PyArg_ParseTuple(args, "O:thread_start", &temp)) // get argument + { + if (!PyCallable_Check(temp)) // not callable + { + PyErr_SetString(PyExc_TypeError, "parameter must be callable"); + return NULL; + } + Py_INCREF(temp); /* Add a reference to new callback */ + int status = pthread_create(&ID, NULL, thread_cb, (void*) temp); + if (status) + { + PyErr_SetString(PyExc_SystemError, "error during thread start"); + return NULL; + } + } + + Py_RETURN_NONE; +} + +static PyMethodDef ThreadMethods[] = { + {"thread_start", thread_start, METH_VARARGS, + "Start a new thread."}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +/** + * Init function. + */ +PyMODINIT_FUNC +initgeneticthread(void) +{ + (void) Py_InitModule("geneticthread", ThreadMethods); +} -- cgit v1.2.3-70-g09d2