Background thread, async and GUI (dlangui)

Bagomot bagomot at gmail.com
Tue Jul 12 19:41:19 UTC 2022


On Tuesday, 12 July 2022 at 19:25:42 UTC, Ali Çehreli wrote:
> 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

Thank you! I will take into account the advice and will not 
inflate the forum thread.


More information about the Digitalmars-d-learn mailing list