Nim/tests/threads/threadex.nim

42 lines
773 B
Nim
Executable file

type
TMsgKind = enum
mLine, mEof
TMsg = object {.pure, final.}
case k: TMsgKind
of mEof: backTo: TThreadId[int]
of mLine: data: string
var
consumer: TThread[TMsg]
printedLines = 0
proc consume() {.thread.} =
while true:
var x = recv[TMsg]()
if x.k == mEof:
x.backTo.send(printedLines)
break
echo x.data
discard atomicInc(printedLines)
proc produce() =
var m: TMsg
var input = open("readme.txt")
while not endOfFile(input):
if consumer.ready:
m.data = input.readLine()
consumer.send(m)
close(input)
m.k = mEof
m.backTo = mainThreadId[int]()
consumer.send(m)
var result = recv[int]()
echo result
createThread(consumer, consume)
produce()
joinThread(consumer)
echo printedLines