我正在尝试将 C++ 相机帧采集库包装到 Python 中。我的回调函数有问题。我使用以下代码从 C 函数调用 python 函数:
PyGILState_STATE gstate;
gstate = PyGILState_Ensure();
result = PyObject_CallObject(my_callback, arglist);
if(result == NULL){
caller.stopLive();
}
Py_DECREF(result);
Py_DECREF(arglist);
PyGILState_Release(gstate);
回调工作正常。当我尝试使用相机库函数停止回调时,就会出现问题。如果python回调函数很短,相机库函数可以停止回调,但如果python回调函数时间较长,相机库函数无法停止回调,程序冻结。
有没有人遇到过类似的问题?你对尝试什么有什么建议吗?
编辑:停止回调的代码是:
static PyObject * stopcallback(PyObject *self, PyObject *args)
{
if(grabber->isListenerRegistered(pListener)){
grabber->removeListener(pListener);
while(grabber->isListenerRegistered(pListener)){
Sleep(0);
}
delete pListener;
printf("Callback stopped\n");
Py_RETURN_NONE;
}
}
我从 Python 调用这个函数。