diff options
author | Kurt B. Kaiser <kbk@shore.net> | 2003-03-10 20:41:07 (GMT) |
---|---|---|
committer | Kurt B. Kaiser <kbk@shore.net> | 2003-03-10 20:41:07 (GMT) |
commit | 98b15ab980aacc317779ce1f9af8da135981b01b (patch) | |
tree | 7975e39ecf6229c91fb5037011a5a07fc443430b /Lib/idlelib | |
parent | a2369928b52ddcbadb5709cfa5df0b502d861090 (diff) | |
download | cpython-98b15ab980aacc317779ce1f9af8da135981b01b.zip cpython-98b15ab980aacc317779ce1f9af8da135981b01b.tar.gz cpython-98b15ab980aacc317779ce1f9af8da135981b01b.tar.bz2 |
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')
-rw-r--r-- | Lib/idlelib/interruptmodule.c | 49 | ||||
-rw-r--r-- | Lib/idlelib/setup.py | 3 |
2 files changed, 51 insertions, 1 deletions
diff --git a/Lib/idlelib/interruptmodule.c b/Lib/idlelib/interruptmodule.c new file mode 100644 index 0000000..8e18d5a --- /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); +} diff --git a/Lib/idlelib/setup.py b/Lib/idlelib/setup.py index 4269273..a7cff9c 100644 --- a/Lib/idlelib/setup.py +++ b/Lib/idlelib/setup.py @@ -1,5 +1,5 @@ import os, glob, sys -from distutils.core import setup +from distutils.core import setup, Extension from distutils.command.build_py import build_py from distutils.command.install_lib import install_lib import idlever @@ -111,5 +111,6 @@ For further details, refer to idlefork.sourceforge.net. 'install_lib':IDLE_Installer}, package_dir = {pkgname: pkg_dir}, packages = [pkgname], + ext_modules = [Extension("interrupt", ["interruptmodule.c"])], scripts = [os.path.join(pkg_dir, idle_name)] ) |