mirror of
https://github.com/python/cpython.git
synced 2025-08-02 08:02:56 +00:00
A interruptmodule.c
M setup.py Implements an interrupt extension module which allows a subthread to raise an interrupt in the main thread.
This commit is contained in:
parent
a2369928b5
commit
98b15ab980
2 changed files with 51 additions and 1 deletions
49
Lib/idlelib/interruptmodule.c
Normal file
49
Lib/idlelib/interruptmodule.c
Normal file
|
@ -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);
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import os, glob, sys
|
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.build_py import build_py
|
||||||
from distutils.command.install_lib import install_lib
|
from distutils.command.install_lib import install_lib
|
||||||
import idlever
|
import idlever
|
||||||
|
@ -111,5 +111,6 @@ For further details, refer to idlefork.sourceforge.net.
|
||||||
'install_lib':IDLE_Installer},
|
'install_lib':IDLE_Installer},
|
||||||
package_dir = {pkgname: pkg_dir},
|
package_dir = {pkgname: pkg_dir},
|
||||||
packages = [pkgname],
|
packages = [pkgname],
|
||||||
|
ext_modules = [Extension("interrupt", ["interruptmodule.c"])],
|
||||||
scripts = [os.path.join(pkg_dir, idle_name)]
|
scripts = [os.path.join(pkg_dir, idle_name)]
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue