Re: sending the address of a struct

2020-09-06 Thread Johann Lermer via Digitalmars-d-learn

On Sunday, 6 September 2020 at 11:10:14 UTC, Simen Kjærås wrote:

auto e = receiveOnly!(shared(Env)*);


Oh, thanks. Seems, that I just missed that bit with the 
pranetheses.


Re: sending the address of a struct

2020-09-06 Thread Simen Kjærås via Digitalmars-d-learn

On Sunday, 6 September 2020 at 09:58:54 UTC, Johann Lermer wrote:

pointer. The error message says:

std.concurrency.MessageMismatch@std/concurrency.d(237): 
Unexpected message type: expected 'shared(Env*)', got 
'shared(test.Env)*'


The error message gives you all the information you need - notice 
the position of the asterisk inside the parens on one, outside on 
the other? The pointer itself is not shared, only the pointee - 
the data pointed to. This works:


auto e = receiveOnly!(shared(Env)*);

--
  Simen


sending the address of a struct

2020-09-06 Thread Johann Lermer via Digitalmars-d-learn

Hi,

I have a struct in a separate thread and want to pass it's 
address back to the main thread. This is how I think it should 
work:


import std.concurrency;

struct Env {}

void run ()
{
shared Env env;
ownerTid.send ();
for (;;) {}
}

void main ()
{
spawn ();
auto e = receiveOnly!(shared Env*);
}

but I'm getting an error when main tries to receive the pointer. 
The error message says:


std.concurrency.MessageMismatch@std/concurrency.d(237): 
Unexpected message type: expected 'shared(Env*)', got 
'shared(test.Env)*'


Now, how can I pass that pointer back to main?