[Mono-list] pthreads in mono
cdhowie at gmail.com
Fri Mar 28 11:42:03 EDT 2008
On Fri, Mar 28, 2008 at 8:10 AM, Paolo Molaro <lupus at ximian.com> wrote:
> The pointer is the one you got with gps_set_callback, so you can just
> ignore the fact that it is a pthread_t pointer and all this thread that
> went ballistic on that:
> static extern int gps_set_callback (IntPtr gps_data, GpsCallback cb, out IntPtr handler);
> IntPtr handler;
> IntPtr gps = gps_open ("localhost", "2947");
> gps_set_callback (gps, mycb, out handler);
Ah, it *creates* a thread. That is a detail I missed when reading the manpage.
Note that it's not that simple though. The signature specifies a
pthread_t*, not a pthead_t**. It wants a pointer to a structure that
will be filled in, not a pointer to a pointer (as is IntPtr&). The
code as writted above will certainly corrupt the memory next to the
location that the "handler" local is stored in, unless
sizeof(pthread_t) is <= IntPtr.Size.
So there are a basically two options: declare a struct matching the
pthread_t struct, or create a new byte of some size reasonably large
enough to contain a pthread_t and pass that off to the function.
More information about the Mono-list