Patch #734118: Add {get|set}busywaitinterval.
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index a61bf7f..288ed15 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -318,6 +318,8 @@
 
 /**** Utils ****/
 
+static int Tkinter_busywaitinterval = 20;
+
 #ifdef WITH_THREAD
 #ifndef MS_WINDOWS
 
@@ -2519,7 +2521,7 @@
 			tcl_tstate = NULL;
 			if(tcl_lock)PyThread_release_lock(tcl_lock);
 			if (result == 0)
-				Sleep(20);
+				Sleep(Tkinter_busywaitinterval);
 			Py_END_ALLOW_THREADS
 		}
 #else
@@ -2831,6 +2833,42 @@
 				      interactive, wantobjects);
 }
 
+static PyObject *
+Tkinter_setbusywaitinterval(PyObject *self, PyObject *args)
+{
+	int new_val;
+	if (!PyArg_ParseTuple(args, "i:setbusywaitinterval", &new_val))
+		return NULL;
+	if (new_val < 0) {
+		PyErr_SetString(PyExc_ValueError,
+				"busywaitinterval must be >= 0");
+		return NULL;
+	}
+	Tkinter_busywaitinterval = new_val;
+	Py_INCREF(Py_None);
+	return Py_None;
+}
+
+static char setbusywaitinterval_doc[] =
+"setbusywaitinterval(n) -> None\n\
+\n\
+Set the busy-wait interval in milliseconds between successive\n\
+calls to Tcl_DoOneEvent in a threaded Python interpreter.\n\
+It should be set to a divisor of the maximum time between\n\
+frames in an animation.";
+
+static PyObject *
+Tkinter_getbusywaitinterval(PyObject *self, PyObject *args)
+{
+        return PyInt_FromLong(Tkinter_busywaitinterval);
+}
+
+static char getbusywaitinterval_doc[] =
+"getbusywaitinterval() -> int\n\
+\n\
+Return the current busy-wait interval between successive\n\
+calls to Tcl_DoOneEvent in a threaded Python interpreter.";
+
 static PyMethodDef moduleMethods[] =
 {
 	{"_flatten",           Tkinter_Flatten, METH_VARARGS},
@@ -2843,6 +2881,10 @@
 	{"mainloop",           Tkapp_MainLoop, METH_VARARGS},
 	{"dooneevent",         Tkapp_DoOneEvent, METH_VARARGS},
 	{"quit",               Tkapp_Quit, METH_VARARGS},
+	{"setbusywaitinterval",Tkinter_setbusywaitinterval, METH_VARARGS,
+	                       setbusywaitinterval_doc},
+	{"getbusywaitinterval",(PyCFunction)Tkinter_getbusywaitinterval,
+	                       METH_NOARGS, getbusywaitinterval_doc},
 	{NULL,                 NULL}
 };
 
@@ -2895,7 +2937,7 @@
 		tcl_tstate = NULL;
 		if(tcl_lock)PyThread_release_lock(tcl_lock);
 		if (result == 0)
-			Sleep(20);
+			Sleep(Tkinter_busywaitinterval);
 		Py_END_ALLOW_THREADS
 #else
 		result = Tcl_DoOneEvent(0);