Background thread, async and GUI (dlangui)
Ali Çehreli
acehreli at yahoo.com
Tue Jul 12 19:25:42 UTC 2022
On 7/12/22 11:47, Bagomot wrote:
> I now have a couple more questions about `Task`:
> 1) How to run a non-static class method through `task`?
> 2) How to use `taskPool` to run a series of tasks of the same type (from
> question 1)?
As a friendly reminder, these questions could be more useful in a
separate forum thread. :)
import std.stdio;
import std.parallelism;
import std.algorithm;
import std.range;
interface Animal {
string song();
}
class Dog : Animal {
string voice_;
this(string voice) {
this.voice_ = voice;
}
string song() {
return voice_ ~ " " ~ voice_;
}
}
void main() {
auto voices = [ "hav", "woof", "bark", "gav", "grrr" ];
auto dogs = voices.map!(voice => new Dog(voice)).array;
// No need to specify this; just being silly...
const workerCount = totalCPUs + 7;
auto tp = new TaskPool(workerCount);
scope (exit) tp.finish();
// a) Classic foreach loop
foreach (dog; tp.parallel(dogs)) {
writeln(dog.song);
}
// b) Adding individual tasks (could be a foreach loop)
dogs.each!(dog => tp.put(task!(d => writeln(d.song))(dog)));
}
Ali
More information about the Digitalmars-d-learn
mailing list