www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How create a function that receive a function and run it in another

reply Marcone <marcone email.com> writes:
import std;
import core.thread;

auto threading(lazy void fun){ return 
task!fun().executeInNewThread(); }

void main(){
	threading(writeln("Hello World!"));
}


I want to create a function threading() to run some function in 
other threading, but I get this error bellow. How can I get 
success?


Error: static function Programa.threading.Task!(fun).Task.impl 
cannot access frame of function Programa.threading
Error: template instance `Programa.threading.Task!(fun)` error 
instantiating
Dec 26 2019
parent reply mipri <mipri minimaltype.com> writes:
On Friday, 27 December 2019 at 06:08:16 UTC, Marcone wrote:
 import std;
 import core.thread;

 auto threading(lazy void fun){ return 
 task!fun().executeInNewThread(); }

 void main(){
 	threading(writeln("Hello World!"));
 }


 I want to create a function threading() to run some function in 
 other threading, but I get this error bellow. How can I get 
 success?


 Error: static function Programa.threading.Task!(fun).Task.impl 
 cannot access frame of function Programa.threading
 Error: template instance `Programa.threading.Task!(fun)` error 
 instantiating
This works: import std; import core.thread; auto threading(void function() fun){ return task(fun).executeInNewThread(); } void main(){ writeln("Main: ", thisTid); threading({ writeln("Hello, ", thisTid); }); }
Dec 26 2019
next sibling parent Marcone <marcone email.com> writes:
On Friday, 27 December 2019 at 07:06:52 UTC, mipri wrote:
 On Friday, 27 December 2019 at 06:08:16 UTC, Marcone wrote:
 import std;
 import core.thread;

 auto threading(lazy void fun){ return 
 task!fun().executeInNewThread(); }

 void main(){
 	threading(writeln("Hello World!"));
 }


 I want to create a function threading() to run some function 
 in other threading, but I get this error bellow. How can I get 
 success?


 Error: static function Programa.threading.Task!(fun).Task.impl 
 cannot access frame of function Programa.threading
 Error: template instance `Programa.threading.Task!(fun)` error 
 instantiating
This works: import std; import core.thread; auto threading(void function() fun){ return task(fun).executeInNewThread(); } void main(){ writeln("Main: ", thisTid); threading({ writeln("Hello, ", thisTid); }); }
Very Good! Thank you: import std; import core.thread; alias threading = compose!(fun => fun.executeInNewThread(), fun => task(fun)); void main(){ threading({writeln("Ola Mundo!");}); }
Dec 27 2019
prev sibling parent Alexandru Ermicioi <alexandru.ermicioi gmail.com> writes:
On Friday, 27 December 2019 at 07:06:52 UTC, mipri wrote:
 On Friday, 27 December 2019 at 06:08:16 UTC, Marcone wrote:
 import std;
 import core.thread;

 auto threading(lazy void fun){ return 
 task!fun().executeInNewThread(); }

 void main(){
 	threading(writeln("Hello World!"));
 }


 I want to create a function threading() to run some function 
 in other threading, but I get this error bellow. How can I get 
 success?


 Error: static function Programa.threading.Task!(fun).Task.impl 
 cannot access frame of function Programa.threading
 Error: template instance `Programa.threading.Task!(fun)` error 
 instantiating
This works: import std; import core.thread; auto threading(void function() fun){ return task(fun).executeInNewThread(); } void main(){ writeln("Main: ", thisTid); threading({ writeln("Hello, ", thisTid); }); }
or you can use just https://dlang.org/library/std/concurrency/spawn.html from std.concurrency to avoid needless bike construction. Best regards, Alexandru.
Dec 30 2019