I ran this snippet
from os import sleep
from random import random, randomize
from times import cpuTime
import threadpool
var chan: Channel[string]
chan.open
proc chanWaiting() {.thread.} =
let start = cpuTime()
var lastTime = cpuTime()
while true:
let current = cpuTime()
if current - lastTime > 0.25:
echo "Already waiting for ", current - start
lastTime = current
var res = tryRecv chan
if res.dataAvailable:
echo "Got message: ", res.msg
break
proc chanSending(sleeping: int) {.thread.}=
let msg = "Hello nice world"
let hold = random sleeping
echo "Hold it first for ", hold, " ms"
sleep hold
chan.send msg
proc main =
randomize()
let sleeping = 2000 # 2 seconds
let start = cpuTime()
spawn chanWaiting()
spawn chanSending(sleeping)
sync()
echo "Operation is finished after ", cpuTime() - start
main()
However, when I compiled it with --cc:vcc , it's only running the spawned of chanWaiting and never sending the message in chanSending.
Using gcc is no problem. Does anyone have idea why?
Thanks in advance.
I'll defer to report it first because my Nim version still 0.16.0
If the result is still same after upgrading my Nim, I'll do so.