Re: [問題] ctype註冊callback function
※ 引述《cobrasgo (體重突破所有均線)》之銘言:※ 引述《cobrasgo (體重突破所有均線)》之銘言:
: 小弟目前在寫程式呼叫期貨商的API
: 但是碰到了問題
: 程式如下
我沒仔細看,但我看到一個我以前也遇過會引發鬼打牆的錯誤
就是這裡
CMPFUNC = CFUNCTYPE(c_int, POINTER(c_char_p))
cb = CMPFUNC(self._oiCallback)
#register a callback to get open interest status
ret = self._RegisterOnOpenInterestCallBack(addressof(cb))
錯在這裡,看起來好像沒啥問題對吧,一開始我也是這樣覺得
但是就是會炸掉,後來發現,主要會炸掉的原因在於
Python是會回收掉reference count的物件
callback沒有reference被收掉後 那塊空間本來是ctypes建的function
後來被收掉 裡面會出現什麼垃圾就不知道了
這就是我之前程式遇到同樣奇怪的問題
怎麼解決呢? 很簡單 就在callback還會被用到時
都一直要保留住那個refernece
改成這樣子
CMPFUNC = CFUNCTYPE(c_int, POINTER(c_char_p))
self.cb = CMPFUNC(self._oiCallback)
#register a callback to get open interest status
ret = self._RegisterOnOpenInterestCallBack(addressof(self.cb))
試試,self.cb一直被保留住 確保在執行時那個callback不會被釋放掉
--
Now.in 網路廣播電台平台 http://now.in
易記學 程式設計教學 http://ez2learn.com/
VICTOR's 個人Blog http://blog.ez2learn.com/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.227.233.35
→
01/27 21:40, , 1F
01/27 21:40, 1F
→
01/27 21:41, , 2F
01/27 21:41, 2F
→
01/27 21:43, , 3F
01/27 21:43, 3F
→
01/27 21:43, , 4F
01/27 21:43, 4F
※ 編輯: StubbornLin 來自: 61.227.233.35 (01/27 22:52)
※ 編輯: StubbornLin 來自: 61.227.233.35 (01/27 22:53)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 8 之 10 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章