mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +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 @@ def _bytecode_filenames(self, files): | ||||||
|                   '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
	
	 Kurt B. Kaiser
						Kurt B. Kaiser