multithreading - Julia 的非阻塞读取

标签 multithreading io julia getch

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

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

最佳答案

我认为,问题是要么您在全局作用域上运行,这使得 @async 创建自己的局部变量(当它读取时,它会读入另一个作用域中的变量),要么您是使用旧版本的 Julia。

以下示例以非阻塞方式从 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])

关于multithreading - Julia 的非阻塞读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49739630/

相关文章:

使用有限线程的 Java 并发

c++ - PThread - 尽管调用了 pthread_join,但线程提前退出

.net - 多线程调试技术

python - pyaudio - "Listen"直到检测到语音然后录制到 .wav 文件

c - list I/O writev 在内部是如何工作的?

vb.net - 异步 PDF 创建的 IOException 问题

.net - 有没有办法/工具来显示系统中所有的内存映射文件?

julia - 如何在命令行中将文件输入到 julia 脚本

julia - Julia Sets 和 Dicts 的顺序是否保证跨 session 、平台和版本稳定?

r - Julia 中有类似 R 的子集函数吗?