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