spawn a function with object as arg?
Adam D. Ruppe
destructionator at gmail.com
Thu Mar 5 03:04:10 UTC 2020
On Wednesday, 4 March 2020 at 23:37:00 UTC, Martin Brezel wrote:
> The documentation for spawn() states: "all arguments to fn must
> either be shared or immutable or have no pointer indirection."
The easiest thing to do is to just cast
import std.concurrency;
import std.socket;
void main() {
auto s = new Socket();
spawn((shared Socket s_) {
Socket s = cast() s_;
}, cast(shared) s);
}
Note the shared argument to the function... then cast AWAY shared
inside that function, and cast TO shared when passing the
argument.
That basically just tricks the compiler. But if you aren't going
to actually use the socket from the original thread anymore, it
should be perfectly fine to do.
(if you do actually share it across threads, using it from
both... it would actually probably still be fine - the Socket
class is a thin wrapper around OS functions that work with
threads. But then you re on your own, the compiler won't help get
it right at all. Abandoning the old one isn't really getting
compiler help either but it is so easy to do that you prolly
won't make a mistake.)
You can also not use `spawn` and instead give `new Thread` a try
from core.thread. That's totally DIY, the compiler won't even try
to help you, but it can be simpler if you know what you're doing
and don't need to pass a lot of
More information about the Digitalmars-d-learn
mailing list