October 22, 2019 Thread synchronization context | ||||
---|---|---|---|---|
| ||||
Hello everyone, Recently, a few days ago I discovered dlang and I really like it. It's a programming language which meets to my idea of what a modern programming language should look like. I decided to do one project in it. Now I am addressing one problem. I have two threads, one main and the other for a communication. How can I call a method from a communication thread in the context of the main thread? Something like the SynchchronizationContext class in c#. An example: alias PacketEventHandler = synchronized void delegate (Object sender, PacketEventArg e); public class TcpClient : Thread { public this() { _socket = new Socket(AddressFamily.INET, SocketType.STREAM); _socket.blocking = false; PacketReceived = &client_packetReceived; super(&Execute); } protected void Execute() { _socket.connect(new InternetAddress(_address, _port)); while (!_terminated) { _socket.send(dataToSend); ubyte[] receivedBuffer = new ubyte[_packetSize]; auto received = _socket.receive(receivedBuffer) if (PacketReceived !is null) PacketReceived(this, new PacketEventArg(receivedBuffer));//that delegate I would like to call from the context of main thread } } public PacketEventHandler PacketReceived; void client_packetReceived(Object sender, PacketEventArg e) { writeln("received byte0: ", e.dataPacket[0]); } } Thank you for any answers |
Copyright © 1999-2021 by the D Language Foundation