On Thursday, 7 August 2014 at 18:23:26 UTC, Nordlöw wrote:
What is the best way to forward a string[] as argument to a
function called through std.concurrency.spawn().
I need this in the following example where I start the vibe.d
event loop in the main thread (the only way I've managed to get
runEventLoop() to work) and run my other program logic in
another which requires command line arguments to passed to the
new thread.
void otherMain(string[] args)
{
// use args
}
void main(string[] args)
{
import std.concurrency: spawn;
auto otherMainTid = spawn(&otherMain, args); // this line
fails
runEventLoop();
}
The line calling spawn() fails as
/home/per/opt/x86_64-unknown-linux-gnu/dmd/linux/bin64/src/phobos/std/concurrency.d(442):
Error: static assert "Aliases to mutable thread-local data not
allowed."
If you don't care how you get the args to otherMain, you can also
use Runtime.args. That way you wouldn't even need to pass it to
the function in the first place.
http://dlang.org/phobos/core_runtime.html#.Runtime.args