[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [Vala] fixed threading example
- From: "Phil Housley" <undeconstructed gmail com>
- To: pancake <pancake youterm com>
- Cc: vala-list gnome org
- Subject: Re: [Vala] fixed threading example
- Date: Tue, 27 May 2008 00:39:00 +0100
Answers down the page...
2008/5/26 pancake <pancake youterm com>:
> By answering Thij's bug report..here's the fixed version for threads found
> in:
>
> http://bugzilla.gnome.org/show_bug.cgi?id=534828
>
> Is this the proper way to use function pointers? the example in
> documentation makes use of the deprecated "pointer" type. I have replaced
> it with 'void*', but the need to cast the ThreadFunc looks ugly to me.
>
> btw i have noticed that thread_create takes only two arguments:
>
> "public static weak Thread create (ThreadFunc func, bool joinable)
> throws ThreadError;"
>
> Are the threads in glib not receiving any data pointer as first argument
> while creating them? pthread ones does it in this way and its quite
> useful.
>
> the definition in glib/gthread.h takes 4 arguments:
>
> -------------
> #define g_thread_create(func, data, joinable, error) \
> (g_thread_create_full (func, data, 0, joinable, FALSE, \
> G_THREAD_PRIORITY_NORMAL, error))
>
> GThread* g_thread_create_full (GThreadFunc func,
> gpointer data,
> gulong stack_size,
> gboolean joinable,
> gboolean bound,
> GThreadPriority priority,
> GError **error);
The C version compared to the Vala version:
func -> the method delegate (a ThreadFunc)
data -> the class instance that the method belongs to (ThreadFunc is
not a static delgate)
joinable -> joinable, same thing
error -> throws ThreadError
I think that all works out ok. You can't pass arbitrary data, but
that isn't the pattern that Vala bindings usually follow anyway.
Instead you pass an instance method and a pointer to the instance goes
automatically.
> -------------
>
> so..the example below works. but is imho not correct, or at least not
> complete.
>
>
> using GLib;
>
> public class Threading : GLib.Object {
>
> public static void thread_func(void *data) {
> stdout.printf("Thread running.\n");
> }
>
> public static void main(string[] args) {
> if (!Thread.supported()) {
> stderr.printf("Cannot run without threads.\n");
> return;
> }
>
> try {
> Thread.create((GLib.ThreadFunc)thread_func, true);
> } catch (ThreadError ex) {
> return;
> }
> }
> }
>
> --pancake
Actually, thread_func doesn't have quite the right signature, but
that's about right. I'll fix up the tutorial, thanks for pointing out
the problem.
--
Phil Housley
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]