Thread overview | |||||
---|---|---|---|---|---|
|
September 06, 2020 sending the address of a struct | ||||
---|---|---|---|---|
| ||||
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 (&env); for (;;) {} } void main () { spawn (&run); 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? |
September 06, 2020 Re: sending the address of a struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Johann Lermer | 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
|
September 06, 2020 Re: sending the address of a struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simen Kjærås | 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.
|
Copyright © 1999-2021 by the D Language Foundation