Runtime error when calling a callback in a parallel Task
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 16 11:19:07 PDT 2015
On 09/15/2015 04:49 PM, BBasile wrote:
> Under Windows this works fine but under Linux I got a runtime error.
Can it be because 'param' is invalid at the time clbck is called? The
following program works under Linux. However, removing thread_joinAll()
is a bug:
import std.parallelism;
import std.stdio;
alias CallBack = void function(void*);
class Foo
{
CallBack clbck;
void* param;
void dotask()
{
// some heavy processing
// tells the caller that some fresh data are available
if(clbck) clbck(param); // debugger breaks HERE
}
void call()
{
task(&dotask).executeInNewThread;
// returns directly but the caller will get a notif when finished
}
}
void handler(void* p)
{
writefln("Finishing with %s at %s", *(cast(int*)p), p);
}
void main()
{
auto foo = new Foo();
foo.clbck = &handler;
int i = 42;
foo.param = &i;
foo.call();
import core.thread;
thread_joinAll();
}
Ali
More information about the Digitalmars-d-learn
mailing list