On 01/30/2017 08:12 PM, Profile Anaysis wrote:

import std.stdio, std.concurrency, core.thread;

class Search : Fiber
{
    this() { super(&start); }
    int res = 0;
    void start()
    {
    Fiber.yield();
        res = 1;
    }
}

void main()
{

    auto search = new Search();

    search.call(); writeln(search.res);
    search.call(); writeln(search.res);
    search.call(); writeln(search.res); // crashes after 3rd call(first
two work fine)
}

That's because the fiber is not in a callable state. (You can check with search.state.) Here is one where the fiber function lives (too) long:

import std.stdio, std.concurrency, core.thread;

class Search : Fiber
{
    this() { super(&start); }
    int res = 0;
    void start() {
        while (true) {
            Fiber.yield();
            ++res;
        }
    }
}

void main()
{
    auto search = new Search();

    foreach (i; 0 .. 5) {
        search.call();
        writeln(search.res);
    }
}

Ali

Reply via email to