October 22, 2019
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