我们有一个C++ QT应用程序,我们将Python嵌入其中。 我们为用户提供了两个界面:
1. 执行文件
2. 停止执行。
我们在非GUI线程中使用PyRun_FileExFlags来执行Python文件。我们想要中断Python文件的执行(假设Python文件有一个无限循环,它永远不会完成执行)。
如何中断?
我们尝试过以下方法: 1. 在主线程中使用PyEval_SetTrace设置跟踪函数 2. (如果用户点击了停止执行)在跟踪回调函数中,我们设置错误信息“PyErr_SetString”
1:设置跟踪函数
我们尝试过以下方法: 1. 在主线程中使用PyEval_SetTrace设置跟踪函数 2. (如果用户点击了停止执行)在跟踪回调函数中,我们设置错误信息“PyErr_SetString”
1:设置跟踪函数
PyGILState_STATE state;
state = PyGILState_Ensure();
PyEval_SetTrace(TraceHook, NULL);
PyGILState_Release(state);
2:跟踪函数
int TraceHook(PyObject *obj, PyFrameObject *frame, int what, PyObject *arg)
{
if (b_isInterrupted)
{
PyGILState_STATE state;
state = PyGILState_Ensure();
PyErr_SetString(PyExc_KeyboardInterrupt, "Python Interrupted.");
PyGILState_Release(state);
}
return 0;
}
Python执行不会被中断。 我希望Python执行可以被中断。
Py_Initialize
的线程更多——你能安排它是相同的吗? - Davis Herringid
参数。 - Davis Herring