Я пытаюсь разработать приложение на основе Си, в которое встроены один или несколько интерпретаторов Python.Я использую gtk-вещи в C-частях и логически вызываю gtk_main () в этом.
Интерпретаторы Python создаются в отдельных pthreads с использованием Py_NewInterpreter () и в основном работают вечно (a, тогда как True'цикл добавляется в конец в случае, если сценарий завершается).
Теперь я хотел бы использовать pyGTK в этих сценариях, который, кажется, работает до тех пор, пока не произойдет обратный вызов (сигнал испускается).Вы можете зарегистрировать обработчики сигналов, чтобы они указывали на части в скриптах Python, но похоже, что главный цикл gtk не может правильно направить их, когда они происходят, что приводит к ошибкам в сегменте, как в журнале ниже.
Я предполагаюэто может быть связано с тем, что состояние потока Python не инициализируется правильно, но не точно.Кто-нибудь может понять, что я делаю неправильно или что проверить?
#0 0xb7ecfc9a in PyFrame_New () from /usr/lib/libpython2.5.so.1.0
#1 0xb7f376ed in PyEval_EvalCodeEx () from /usr/lib/libpython2.5.so.1.0
#2 0xb7ed09b6 in ?? () from /usr/lib/libpython2.5.so.1.0
#3 0xb7eae327 in PyObject_Call () from /usr/lib/libpython2.5.so.1.0
#4 0xb7f30f7c in PyEval_CallObjectWithKeywords () from /usr/lib/libpython2.5.so.1.0
#5 0xb7eaeb5c in PyObject_CallObject () from /usr/lib/libpython2.5.so.1.0
#6 0xb424face in ?? () from /usr/lib/pymodules/python2.5/gtk-2.0/gobject/_gobject.so
#7 0xb76e113a in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#8 0xb76f761d in ?? () from /usr/lib/libgobject-2.0.so.0
#9 0xb76f8bfc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#10 0xb76f9076 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#11 0xb7ab3a8a in gtk_button_clicked () from /usr/lib/libgtk-x11-2.0.so.0
#12 0xb7ab5048 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#13 0xb76eecac in g_cclosure_marshal_VOID__VOID () from /usr/lib/libgobject-2.0.so.0
#14 0xb76df7a9 in ?? () from /usr/lib/libgobject-2.0.so.0
#15 0xb76e113a in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#16 0xb76f6eba in ?? () from /usr/lib/libgobject-2.0.so.0
#17 0xb76f8bfc in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#18 0xb76f9076 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#19 0xb7ab3b2a in gtk_button_released () from /usr/lib/libgtk-x11-2.0.so.0
#20 0xb7ab3b73 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#21 0xb7b70e74 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#22 0xb76df7a9 in ?? () from /usr/lib/libgobject-2.0.so.0
#23 0xb76e113a in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#24 0xb76f7266 in ?? () from /usr/lib/libgobject-2.0.so.0
#25 0xb76f8a7b in g_signal_emit_valist () from /usr/lib/libgobject-2.0.so.0
#26 0xb76f9076 in g_signal_emit () from /usr/lib/libgobject-2.0.so.0
#27 0xb7c9d156 in ?? () from /usr/lib/libgtk-x11-2.0.so.0
#28 0xb7b694cd in gtk_propagate_event () from /usr/lib/libgtk-x11-2.0.so.0
#29 0xb7b6a857 in gtk_main_do_event () from /usr/lib/libgtk-x11-2.0.so.0
#30 0xb79f3dda in ?? () from /usr/lib/libgdk-x11-2.0.so.0
#31 0xb7636305 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
#32 0xb7639fe8 in ?? () from /lib/libglib-2.0.so.0
#33 0xb763a527 in g_main_loop_run () from /lib/libglib-2.0.so.0
#34 0xb7b6ae19 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0