diff options
author | necoro <> | 2006-09-17 17:22:10 +0000 |
---|---|---|
committer | necoro <> | 2006-09-17 17:22:10 +0000 |
commit | fe43409d7ac9c2527ab99847fecdace175b3b81d (patch) | |
tree | e1427112c6ffbc98986d4eaa7cee9949842527b4 /obsolete | |
parent | 1bf23a35968801e6884b97b4cd8cc923bd91f3ec (diff) | |
download | portato-fe43409d7ac9c2527ab99847fecdace175b3b81d.tar.gz portato-fe43409d7ac9c2527ab99847fecdace175b3b81d.tar.bz2 portato-fe43409d7ac9c2527ab99847fecdace175b3b81d.zip |
Removed our own threading-module ...
Diffstat (limited to 'obsolete')
-rw-r--r-- | obsolete/geneticthread.c | 62 |
1 files changed, 62 insertions, 0 deletions
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 <Python.h> +#include <pthread.h> + +/** + * 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); +} |