import std/[threadpool, os] proc setupSender(channel: var Channel[string]) = proc sendMsg() = while true: let terminalInput = readLine(stdin) echo "Sending message from Frontend from thread ", getThreadId(), ": ", terminalInput channel.send(terminalInput) spawn sendMsg() proc setupReceiver(channel: var Channel[string]) = proc recvMsg() = while true: let msg: string = channel.recv() echo "Received message at Backend on Thread: ", getThreadId(), " :", msg spawn recvMsg() proc main() = var commChan: Channel[string] commChan.open() setupSender(commChan) setupReceiver(commChan) sync() main() # `Error: 'channel' is of type which cannot be # captured as it would violate memory safety, declared here: # /home/philipp/dev/playground/src/playground.nim(3, 18); using # '-d:nimNoLentIterators' helps in some cases. Consider using a which can be captured.`