std.concurrency : using delegate in lieu of function

Daniel Gibson metalcaedes at gmail.com
Fri Aug 27 10:49:55 PDT 2010


Gabriel Huau schrieb:
> Hello,
> 
> I would like to know, why the module std.concurrency use function()
> parameter in lieu of delegate ? 
> 
> Delegate would be usefull for example to pass Function Member to
> spawn().
> 
> Example :
> 
> class Foo
> {
> 	void test() 
> 	{	
> 		for(;;)
> 		{
> 			receive(
> 				(string s) { writeln("string"); }
> 			);
> 		}
> 	
> 	}
> }
> 
> void main()
> {
> 	Foo l = new Foo();
> 	void delegate() dg;
> 
> 	dg = &l.test;
> 	auto a = spawn(dg);
> 
> 	a.send("test");
> }
> 
> I have tested and it worked.
> 

Just a guess:
"The general idea is that every messageable entity is represented by a 
common handle type (called a Cid in this implementation), which allows 
messages to be sent to in-process threads, on-host processes, and 
foreign-host processes using the same interface."

(I guess by Cid they mean Tid)
You probably tried this with a thread - which should work fine, because 
the delegate's context (which object does it belong to) as accessible 
for the other thread.
If the other "logical process" however is a physical process (on the 
same or some other machine - i.e. no thread) the context is not available.
Creating a new process with a normal function and its arguments is not a 
problem, because all needed context is provided  (the function and its 
args).


More information about the Digitalmars-d mailing list