ctypes and how to copy data passed to callback
waldek
waldemar.rymarkiewicz at gmail.com
Tue Jul 29 06:05:14 EDT 2008
On Jul 28, 4:03 pm, Thomas Heller <thel... at python.net> wrote:
> waldek schrieb:
>
>
>
> > Hi,
>
> > I'm trying to handle data passed to Py Callback which is called from
> > C dll. Callback passes data to another thread using Queue module and
> > there the data are printed out.
>
> > If data is printed out in a callback itself it's ok. If I put on
> > queue and next get from queue in another thread script prints some
> > trash. Looks like the data is released when callback returned. I tired
> > to make d = copy.deepcopy(data), but it does not work - I got nothing.
> > Any idea why it's happening ?
>
> > --------------------- main thread --------
> > def callback(data, size):
> > myqueue.put((data, size))
>
> > mydll = cdll.MyDLL
> > cbproto = CFUNCTYPE(c_int, POINTER(c_char), c_int)
> > mycallback = cbproto(callback)
>
> > mydll.RegisterCallback(mycallback)
>
> > ---------------------------------- thread listener
> > ----------------------
>
> > while True:
> > data, size = myqueue.get()
> > print "***", data[:size]
>
> > ------------------------------------------------------------------------------
>
> I guess your code would work if you change it in this way:
>
> > def callback(data, size):
> > myqueue.put(data[:size])
> > while True:
> > data = myqueue.get()
> > print "***", data
>
> Thomas
Both solutions work fine. The secon is nicer :)
Thanks
More information about the Python-list
mailing list