spawn a function with object as arg?

Martin Brezel martin.brzenska at
Wed Mar 4 23:37:00 UTC 2020

I want to create a Client, which receives and handles received 
data in  background while the Client can send via the same socket.

My first idea was something like this:
>class Client {
>	private Socket socket;
>	private Tid receiverTid;
>	this(Socket socket) {
>		this.socket = socket;
>		this.receiverTid = spawn( &receiver, this.socket );
>	}
>	void command(Command[] cmd) {
>		this.socket.send(cmd.makeMessage());
>	}
>void receiver(Socket socket) {
>	/*..*/
>} naive of me :)

The compiler says: "Error: static assert:  "Aliases to mutable 
thread-local data not allowed."
The documentation for spawn() states: "all arguments to fn must 
either be shared or immutable or have no pointer indirection."

So, now i am thinking about to create a instance of Socket inside 
the spawned worker and do send and receive via Message Passing 
between Client and the worker.

But, is there another way?
I am writing lot of golang lately and i am sure something like 
`go receive(&socket)` would be valid. Now, i am wondering if 
there is a similar simple way to do it in dlang.

More information about the Digitalmars-d-learn mailing list