Turned out that documentation, even the official sources, is still sketchy and young.
E.g. I tried to build the following, taken from here:
void* thread_func() { stdout.printf("Thread running.\n"); return null; } int main(string[] args) { if (!Thread.supported()) { stderr.printf("Cannot run without threads.\n"); return 1; } try { Thread.create(thread_func, false); } catch (ThreadError exc) { return 1; } return 0; }It will give up compiling with the following error:
$ valac --thread main.vala main.vala:19.9-19.21: error: cannot infer generic type argument for type parameter `GLib.Thread.create.T' Thread.create(thread_func, false); ^^^^^^^^^^^^^ Compilation failed: 1 error(s), 0 warning(s)The compiler does complain about an actual lack in my code. Infact the declaration of "Thread.create()" is:
Thread<T> create<T>(ThreadFunc<T> func, bool joinable)The culprit is the generic type "T" to be passed to the create method.
But the type of what I need to provide?
Thread.create<?>(thread_func, false)It's the return type of the thread function "thread_func" passed as the first parameter to the create method.
Hence I need to call it this way instead:
Thread.create<void*>(thread_func, false)In the case thread_func had returned
bool
:Thread.create<bool>(thread_func, false)And so on.
Here's the incomplete documentation for the create method that led me to the initial impasse.
Here is where I found the solution (thanks to Abderrahim Kitouni) instead.
Yeah, a bit of Googling helped me as well.
No comments:
Post a Comment