diff options
author | Kurt B. Kaiser <kbk@shore.net> | 2003-03-10 20:41:07 +0000 |
---|---|---|
committer | Kurt B. Kaiser <kbk@shore.net> | 2003-03-10 20:41:07 +0000 |
commit | 98b15ab980aacc317779ce1f9af8da135981b01b (patch) | |
tree | 7975e39ecf6229c91fb5037011a5a07fc443430b /Lib/idlelib/interruptmodule.c | |
parent | a2369928b52ddcbadb5709cfa5df0b502d861090 (diff) | |
download | cpython-git-98b15ab980aacc317779ce1f9af8da135981b01b.tar.gz |
A interruptmodule.c
M setup.py
Implements an interrupt extension module which allows a subthread
to raise an interrupt in the main thread.
Diffstat (limited to 'Lib/idlelib/interruptmodule.c')
-rw-r--r-- | Lib/idlelib/interruptmodule.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Lib/idlelib/interruptmodule.c b/Lib/idlelib/interruptmodule.c new file mode 100644 index 0000000000..8e18d5af90 --- /dev/null +++ b/Lib/idlelib/interruptmodule.c @@ -0,0 +1,49 @@ +/*********************************************************************** + * interruptmodule.c + * + * Python extension implementing the interrupt module. + * + **********************************************************************/ + +#include "Python.h" + +#ifndef PyDoc_STR +#define PyDoc_VAR(name) static char name[] +#define PyDoc_STR(str) str +#define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) +#endif + +/* module documentation */ + +PyDoc_STRVAR(module_doc, +"Provide a way to interrupt the main thread from a subthread.\n\n\ +In threaded Python code the KeyboardInterrupt is always directed to\n\ +the thread which raised it. This extension provides a method,\n\ +interrupt_main, which a subthread can use to raise a KeyboardInterrupt\n\ +in the main thread."); + +/* module functions */ + +static PyObject * +setinterrupt(PyObject * self, PyObject * args) +{ + PyErr_SetInterrupt(); + Py_INCREF(Py_None); + return Py_None; +} + +/* registration table */ + +static struct PyMethodDef methods[] = { + {"interrupt_main", setinterrupt, METH_VARARGS, + PyDoc_STR("Interrupt the main thread")}, + {NULL, NULL} +}; + +/* module initialization */ + +void +initinterrupt(void) +{ + (void) Py_InitModule3("interrupt", methods, module_doc); +} |