来自成员函数的任务在D中使用std.parallelism

时间:2012-03-02 19:22:53

标签: d parallel-processing

我想创建一个执行结构或类的成员函数的任务:

import std.parallelism, std.stdio;

struct S {
    void foo() {
        writeln("S.foo()");
    }
}

void main() {
    S s;
    auto pool = new TaskPool();
    auto t = task!(s.foo)(); // error
    pool.put(t);
    pool.finish();
}

我怎样才能做到这一点?我也试过使用代表无济于事。


编辑:我发现了一个可能相关的问题here

1 个答案:

答案 0 :(得分:3)

import std.parallelism, std.stdio;

struct S {
    void foo() {
        writeln("S.foo()");
    }
}

void main() {
    S s;
    auto pool = new TaskPool();
    auto t = task(&s.foo); // Constructor taking a runtime function pointer, delegate or callable (opCall).
    pool.put(t);
    pool.finish();
}

输出:

S.foo()

你也可以使用scopedTask,但是你必须等到任务完成才能返回。 TaskPool.finish不等待。