非阻塞读取朱莉娅

时间:2018-04-09 18:43:27

标签: multithreading io julia getch

我想在不阻塞主线程的情况下阅读用户输入,就像getch()中的conio.h函数一样。朱莉娅有可能吗?

我尝试使用@async,但看起来我的输入没有被读取,尽管主线程没有被阻止。

1 个答案:

答案 0 :(得分:1)

我认为,问题是你是在全局范围内运行,这会使@async创建自己的局部变量(当它读取时,它读入另一个范围内的变量)或者你使用的是旧版本朱莉娅。

以下示例以非阻塞方式从STDIN读取整数。

function foo()
    a = 0
    @async a = parse(Int64, readline())
    println("See, it is not blocking!")
    while (a == 0)
        print("")
    end
    println(a)
end

以下两个示例使用数组在全局范围内完成工作。您可以使用其他类型的可变对象执行相同的操作。 数组示例:

function nonblocking_readInt()
    arr = [0]
    @async arr[1] = parse(Int64, readline())
    arr
end

r = nonblocking_readInt() # is an array
println("See, it is not blocking!")
while(r[1] == 0) # sentinel value check
    print("")
end
println(r[1])