我不明白爲什麼我的代碼不起作用。我有一個矢量,這個矢量在某些位置包含input-ports
,在其他位置包含0
。如果有input port
,我想檢查是否有可用的數據。如果有數據可用,請閱讀並排入隊列。如果沒有,繼續前進。當字符準備好時從輸入端口塊中讀取
這裏是我的代碼:
;The name of the vector is 'in'.
(define (read-ports)
(let loop
((idx 0))
(if (not (= idx (vector-length in)))
(let ((port (vector-ref in idx)))
(if (not (eq? port 0))
(if (char-ready? port)
(let ((data (read port)))
(sendm buffer 'enqueue! data)) ;my own queue
(loop (+ idx 1)))
(loop (+ idx 1))))
'done)))
我的問題是,char-ready
回報true
,但read
操作仍然塊!我確定數據正在發送,但爲什麼會被阻止?我試圖發送的數據是vectors
,但這些數據包含的值介於0和255之間。實際上它們是vectors
的bytes
。
在此先感謝
'char-ready?'是真的,如果你可以使用'read-byte',而不是'read'。 – uselpa
有什麼我可以用來檢查'讀''是否會阻止? – JNevens
你確定你需要'read'嗎?我會研究'read-bytes- *'和'peek- *'程序。 – uselpa