2016-08-16 65 views
0

我現在的目標是創建團隊講3管理器服務(通過頻道和其他人切換用戶): 所以我創建了TS3 SDK lib用Python的Cython包裝):https://mega.nz/#!pQdFjIwD!1vg8DPsFtYR4icVqWXzvpdbAQ47-n-aPz2niRkTU4fY(主模塊:http://pastebin.com/PywhH4bf) 在這個包裝中,我在模塊中使用了測試連接。要測試這個模塊,只需導入它。程序完成退出代碼-1073741819(0xC0000005)(Cython,TeamSpeak3)

而且我得到了在python控制檯消息(調用ts3client_startConnection後):Process finished with exit code -1073741819 (0xC0000005)(訪問衝突)

而且我看到TS3回調是從非主線程中調用。

有了這個日誌:

2016-08-16 10:14:20.862577|INFO |    | |TeamSpeak 3 Client 3.0.3 (2015-03-30 11:30:36) SDK 
2016-08-16 10:14:20.863574|INFO |    | |SystemInformation: Windows 9 8664 {6} {3} {9600} (9600) x64 (AMD or Intel) Binary: 32bit 
2016-08-16 10:14:20.863574|INFO |    | |Using hardware aes 
2016-08-16 10:14:20.876587|DEBUG |Direct Sound | |setting timer resolution to 1ms 
2016-08-16 10:14:20.892602|ERROR |SoundBckndIntf| |Could not load "ts3soundbackend_isSupported" from backend dynamic library 
spawn connection handler 
mode 
Default capture mode: b'Windows Audio Session' 

('Default capture device: %s %s\n', b'\xd0\x9c\xd0\xb8\xd0\xba\xd1\x80\xd0\xbe\xd1\x84\xd0\xbe\xd0\xbd (\xd0\xa3\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd0\xbe \xd1\x81 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb4\xd0\xb5\xd1\x80\xd0\xb6\xd0\xba\xd0\xbe\xd0\xb9 High Definition Audio)', b'{0.0.1.00000000}.{c28d826f-9cd5-414b-a018-bbfc0cbc1298}') 
2016-08-16 10:14:20.905616|DEBUG |Windows Audio Session| |WAS::openDevice-enter 
2016-08-16 10:14:20.912622|DEBUG |Windows Audio Session| |WAS Buffer size: 896 
2016-08-16 10:14:20.912622|DEBUG |Windows Audio Session| |WAS::openDevice-leave 
2016-08-16 10:14:20.912622|INFO |PreProSpeex |1 |Speex version: speex-1.2beta3 
2016-08-16 10:14:20.912622|DEBUG |Windows Audio Session| |WAS::startDevice-enter 
2016-08-16 10:14:20.913622|DEBUG |Windows Audio Session| |WAS::startDevice-leave 
Default playback mode: b'Windows Audio Session' 

('Default playback device: %s %s\n', b'\xd0\x94\xd0\xb8\xd0\xbd\xd0\xb0\xd0\xbc\xd0\xb8\xd0\xba\xd0\xb8 (\xd0\xa3\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd0\xbe \xd1\x81 \xd0\xbf\xd0\xbe\xd0\xb4\xd0\xb4\xd0\xb5\xd1\x80\xd0\xb6\xd0\xba\xd0\xbe\xd0\xb9 High Definition Audio)', b'{0.0.0.00000000}.{cb324415-bf79-473b-9a59-69a1ca4bfe56}') 
2016-08-16 10:14:20.913622|DEBUG |Windows Audio Session| |WAS::openDevice-enter 
2016-08-16 10:14:20.918627|DEBUG |Windows Audio Session| |WAS Buffer size: 896 
2016-08-16 10:14:20.918627|DEBUG |Windows Audio Session| |WAS::openDevice-leave 
2016-08-16 10:14:20.918627|DEBUG |Windows Audio Session| |WAS::startDevice-enter 
2016-08-16 10:14:20.918627|DEBUG |Windows Audio Session| |WAS::startDevice-leave 
creating identity 
Using identity: b'295V/MObSjZ2wIe+dMWhUoLET/UpS6ENHlhWSVdYYSZ5UnQTU3dneUFQLAF/FDVRBXkaFVFeAH10V1cDQn0Gd3BVYgFgXwV4IgxjOVB2DCwtET9TfgcaA31GE1MBZFxLBXtgDHd9WHFka0NJUUQweGprQnp2cjNrSkxBMXJaazRWeDJMTkRUOUlXcVVyZ0p0WnpDU0lDOVlRPT0=' 

Client lib initialized and running 

Connect status changed: 1 1 0 

2016-08-16 10:14:20.926635|DEVELOP |PktHandler | |Puzzle solve time: 7 
Connect status changed: 1 2 0 

Connect status changed: 1 3 0 

Connect status changed: 1 4 0 

而且我不重複的隨機錯誤:

Fatal Python error: GC object already tracked 

Fatal Python error: PyThreadState_Get: no current thread 
+1

您的第一個鏈接斷開(似乎需要登錄)。儘管我甚至會猜測這個鏈接,但是從一個有用的_minimal_例子來看,這還有很長的路要走。 – DavidW

+0

@DavidW現在鏈接有效。 – Broly

+0

@DavidW所有的代碼都是用cython ts3 sdk庫包裝的,只有最少的連接示例。如何做到這一點*最小*? – Broly

回答

0

由於缺乏可驗證的例子,這是一個小有點猜測。

如果這些處理函數是從C庫(ts3client_ *)創建的線程中調用的,則在調用python函數時,GIL尚未被正確獲取。

添加with gil

cdef void onConnectStatusChang‌​eEvent(uint64 serverConnectionHand‌​lerID, 
            int newStatus, 
            unsigned int errorNumber) with gil: 

可能會有幫助。

__main__()末尾也沒有代碼,主線程至少空轉可能會更好。

if (error != ERROR_ok): 
    print("Error connecting to server: %d\n"% error) 

print("Client lib initialized and running\n") 

以下行可以在打印通話後添加一個快速測試

import time 
while True: 
    time.sleep(1.0) 
+0

需要完全凍結python應用程序。在代碼發生了一些變化之後(我得到了凍結後),我得到了'致命Python錯誤:drop_gil:GIL未被鎖定'的消息,並且再次'處理完成了退出代碼-1073741819(0xC0000005)'。 爲了測試應用程序,只運行'compile.py'和'test.py'(我更新了存檔,現在用'gil') – Broly

+0

我用你的代碼(改變了32到64),並且連接了'test.py'正確... – Fuzzyma

相關問題