10#ifdef LIBCARLA_WITH_PYTHON_SUPPORT
12# if defined(__clang__)
14# pragma clang diagnostic push
15# pragma clang diagnostic ignored "-Wdeprecated-register"
19# include <boost/python.hpp>
21# if defined(__clang__)
23# pragma clang diagnostic pop
35#ifdef LIBCARLA_WITH_PYTHON_SUPPORT
36# if PY_MAJOR_VERSION >= 3
37 return PyGILState_Check();
40 PyThreadState *tstate = _PyThreadState_Current;
42 return (tstate !=
nullptr) && (tstate == PyGILState_GetThisThreadState());
50#ifdef LIBCARLA_WITH_PYTHON_SUPPORT
58 AcquireGIL() : _state(PyGILState_Ensure()) {}
61 PyGILState_Release(_state);
73 PyGILState_STATE _state;
78 PyEval_RestoreThread(_state);
88 PyThreadState *_state;
110 template <
typename T>
112#ifdef LIBCARLA_WITH_PYTHON_SUPPORT
113 if (ptr !=
nullptr && !PythonUtil::ThisThreadHasTheGIL()) {
137 template <
typename T>
140#ifdef LIBCARLA_WITH_PYTHON_SUPPORT
141 if (ptr !=
nullptr && PythonUtil::ThisThreadHasTheGIL()) {
可以传递给智能指针的删除器,以便在销毁对象之前获取GIL。
void operator()(T *ptr) const
可以传递给智能指针的删除器,以便在销毁对象之前释放GIL。
void operator()(T *ptr) const
static bool ThisThreadHasTheGIL()