Passing Command Line Arguments to a new Thread

H. S. Teoh via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Aug 7 11:32:01 PDT 2014


On Thu, Aug 07, 2014 at 06:23:24PM +0000, "Nordlöw" via Digitalmars-d-learn 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."

Maybe try args.idup instead?


T

-- 
2+2=4. 2*2=4. 2^2=4. Therefore, +, *, and ^ are the same operation.


More information about the Digitalmars-d-learn mailing list