Way to pass params to a function passed to a fiber?

Bienlein ffm2002 at web.de
Mon Oct 3 08:10:43 UTC 2022


Hello,

I'm looking for a way to pass parameters to a function called by 
a fiber. Starting a fiber works like this:

int main()
{
     auto fiber = new Fiber(&myFunc);
     fiber.call();
     fiber.call();
     return 0;
}

void myFunc() {
     writeln("Fiber called");
     Fiber.yield();
     writeln("Fiber recalled after yielding");
}

In the code above there is no way to add parameters to myFunc. 
The construcor of class Fiber does not allow for a function to be 
passed that has parameters (unlike for the spawn function when 
starting a thread).

I ended up with something like this:

class Foo {
     public int i;
}


Foo foo;

static this()
{
     foo = new Foo;
}

int main()
{
     auto fiber = new Fiber(&myFunc);
     fiber.call();
     fiber.call();
     return 0;
}

void myFunc() {
     import std.stdio;
     writeln("foo: ", foo.i);
     foo.i++;
     Fiber.yield();
     writeln("foo: ", foo.i);
}

But this solution is a bit clumsy. It's kind of programming with 
global variables.
My question is whether someone has an idea for a better solution.

Thank you, Bienlein


More information about the Digitalmars-d-learn mailing list