gpt4 book ai didi

multithreading - 正确使用 Scheme (Bigloo) 中的线程

转载 作者:行者123 更新时间:2023-12-03 12:58:01 25 4
gpt4 key购买 nike

我正在尝试使用 Bigloo 实现在 Scheme 中编写应用程序服务器。编码:

(module server
(library fthread)
(main main))

(define *port-num* 8080)

(define (main argv)
(let* ((socket0 (make-server-socket *port-num*))
(ts (thread-start! (make-thread (lambda () (start-server socket0))))))
(scheduler-start!)
(fprint (current-error-port) "Shutting down...")))

(define (start-server socket0)
(lambda ()
(print "Starting server...")
(let loop ()
(let ((s (socket-accept socket0)))
(print "New connection: " s)
(thread-start! (make-thread (lambda () (handle-request s))))
(thread-yield!)
(loop)))))

(define (handle-request s)
(print "new request")
(socket-shutdown s #f))

它编译正常,但程序在启动后立即终止:
$ bigloo -o server server.scm
$ ./server
Shutting down...

我错在哪里?

非常感谢。

最佳答案

我不知道 Bigloo 的 fthread 库,但可能是您立即从 start-server 返回了 lambda而不是做工作?

就像我说的,我不知道 fthread,所以也许这就是你应该使用它的方式。除了在 handle-request你没有这个 lambda 包装器,你调用 make-thread完全相同的方式:

(make-thread (lambda () (start-server socket0)))
; vs
(make-thread (lambda () (handle-request s)))

如果这是问题所在,您可以通过去掉 start-server 中的 lambda 来修复它。 ,或通过更改您的第一个 make-thread拨电至
(make-thread (start-server socket0))

关于multithreading - 正确使用 Scheme (Bigloo) 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com