задачи из функций-членов, используя std.parallelism в D - PullRequest
1 голос
/ 02 марта 2012

Я хотел бы создать задачу, которая выполняет функцию-член структуры или класса:

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();
}

Как мне этого добиться? Я также пытался использовать делегатов безрезультатно.


edit: Я нашел потенциально связанный вопрос здесь .

1 Ответ

3 голосов
/ 04 марта 2012
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 не ждет.

...