2010-07-07 133 views
7

我和一個朋友正在開發一個使用Boost :: Python的應用程序。我已經定義了一個C++接口(以及純虛擬類),通過Boost :: Python向用戶展示,這些用戶必須從中繼承並創建一個類,應用程序需要使用該類來實現某種回調機制。關於Boost :: Python和Boost :: Threads的問題

一切都很不錯。現在,函數回調可能需要一些時間(用戶可能編寫了一些重要的東西)...但是我們需要重新繪製窗口,所以它看起來不會「卡住」。我們想要使用Boost :: Thread來實現這個。一次只能運行一個回調函數(其他線程不會同時調用python),所以我們認爲它不會那麼重要......因爲我們不使用python中的線程,也不使用包裝爲python的C++代碼。我們要做的就是在Py_Initialize()之後調用PyEval_InitThreads(),然後在它自己的boost線程中調用函數回調之前,我們在線程結束時使用宏PY_BEGIN_ALLOW_THREADS和宏PY_END_ALLOW_THREADS。

我想我不需要說執行永遠不會到達第二個宏。它每次運行時都會顯示幾個錯誤...但是總是在調用實際的回調函數時。我已經搜索了很多,甚至閱讀了關於線程的一些PEP文檔,但是他們都討論了python模塊內部的線程(我不認爲它只是一個純的虛擬類暴露),或者在python中進行線程化,而不是主要應用程序從多個線程調用Python。

請幫忙,這讓我感到沮喪的幾個小時。

詩篇。幫幫我!

+0

你看到了哪些錯誤? – 2010-07-08 18:22:49

+0

它總是一個SIGSEGV。 – Fabzter 2010-07-08 20:19:11

回答

1

Python可以從多個線程串行調用,我不認爲這是一個問題。這聽起來像你的錯誤只是來自不良的C++代碼,正如你所說的錯誤發生在PY_BEGIN_ALLOW_THREADS之後和PY_END_ALLOW_THREADS之前。

如果你知道這是不正確的,你可以多發一點你的實際代碼,並確切地顯示它的錯誤和錯誤的地方?