;; A simple program demonstrating how parameter objects interact with threads
;;
;; Note this is poor code as it uses timing via sleeps instead of proper 
;; thread synchronization!!!
;;
(import (scheme base)
        (scheme read)
        (scheme write)
        (srfi 18)
        )

(thread-start!
  (make-thread
    (lambda ()
      (thread-sleep! 1.2)
      (display "started thread, this should be written to console")
      (newline)
      (display "thread done")
      (newline)
      (flush-output-port (current-output-port)))))

(thread-sleep! 1) ;; Prevent race condition replacing stdout before thread is spawned
(write `(1 2 3))
(define fp (open-output-file "tmp.txt"))
(parameterize
  ((current-output-port fp))
  (write `(4 5 6))
  (thread-sleep! 3)
)
(close-port fp)
(write `(7 8 9))