Я и друг разрабатывают приложение, которое использует Boost :: Python. Я определил интерфейс в C++ (ну чистый виртуальный класс), который был открыт через Boost :: Python для пользователей, которым необходимо наследовать его и создать класс, который приложение использует и использует для некоторого механизма обратного вызова.Проблемы с Boost :: Python и Boost :: Темы
Все, что далеко идет очень хорошо. Теперь обратный вызов функции может занять некоторое время (пользователь может запрограммировать некоторые тяжелые вещи) ... но нам нужно перекрасить окно, поэтому оно не выглядит «застрявшим». Мы хотели использовать Boost :: Thread для этого , За один раз будет выполняться только один обратный вызов (ни один другой поток не будет вызывать python в одно и то же время), поэтому мы думали, что это будет не так много ... поскольку мы не используем потоки внутри python, ни в Код C++, завернутый для python.
Что мы делаем, вызывая PyEval_InitThreads() только после того, как Py_Initialize(), а затем, перед вызовом функции обратного вызова внутри его собственной повышающей нити, мы используем макрос PY_BEGIN_ALLOW_THREADS и, а также макро PY_END_ALLOW_THREADS когда нить закончилась.
Думаю, мне не нужно говорить, что исполнение никогда не достигает второго макроса. Он показывает несколько ошибок каждый раз, когда он запускается ... но t всегда вызывает фактический обратный вызов. Я много гугнул, даже прочитал некоторые документы PEP по темам, но все они говорят о потоковом потоке внутри модуля python (который я не вижу, это просто чистый виртуальный класс) или потоковой передачи внутри python, а не о главном приложение, вызывающее Python из нескольких потоков.
Пожалуйста, помогите, это меня разочаровывало в течение нескольких часов.
Ps. Помогите!
Какие ошибки вы видите? –
Это всегда SIGSEGV. – Fabzter