On Jun 10, 7:41 am, "Gabriel Genellina" <gagsl-...@yahoo.com.ar> wrote: > En Mon, 08 Jun 2009 22:15:22 -0300, BigHand <hewei...@gmail.com> escribió: > > > I have an embedded python application. which is a MFC app with > > Python interpreter embedded. > > > In the App, I have a separate thread to execute a Python script > > (using the PyRun_File), but if the user want to stop the executing > > script, how should I do? > > > A possible way is terminate the thread of executing the scripts by > > TerminateThread(). but TerminateThread() is unsafe and not > > recommended. > > > guys, could you guide me on this? > > You could use PyThreadState_SetAsyncExc (to "inject" an exception), or > perhaps PyErr_SetInterrupt (to emulate ^C, which in turn generates a > KeyboardInterrupt). This should work fine for well-behaved scripts, but if > it ignores all exceptions like this: > try: ... > except: pass > you'll have to look at ceval.c how to break out of the running loop. > > (this is yet another argument against indiscriminately using a bare except > clause...) > > -- > Gabriel Genellina
hello.Gabriel. PyThreadState_SetAsyncExc cause me a win32 exception of "Stack overflow" > msvcr80d.dll!_getptd_noexit() Line 592 C msvcr80d.dll!_getptd() Line 658 + 0x5 bytes C msvcr80d.dll!_LocaleUpdate::_LocaleUpdate(localeinfo_struct * plocinfo=0x00000000) Line 264 + 0x5 bytes C++ msvcr80d.dll!_output_l(_iobuf * stream=0x10311d40, const char * format=0x1e26e0ac, localeinfo_struct * plocinfo=0x00000000, char * argptr=0x000333c4) Line 1028 C++ msvcr80d.dll!fprintf(_iobuf * str=0x10311d40, const char * format=0x1e26e0ac, ...) Line 70 + 0x13 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2000 + 0x19 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C python30_d.dll!PyErr_Occurred() Line 133 + 0x5 bytes C python30_d.dll!Py_FatalError(const char * msg=0x1e26a2d4) Line 2001 + 0x5 bytes C python30_d.dll!PyThreadState_Get() Line 349 + 0xa bytes C My app is a MFC app, it have the main thread and the sub thread, the sub thread run the script(Py_RunFile), That I am looking for a way to stop the Py_RunFile from the main thread. that looks like I have to use the TerminateThread() . thanks.Gabriel, could you find some example for me? -- http://mail.python.org/mailman/listinfo/python-list