When using thread-join! like this
............. .............
(define t1 (thread-start! (make-thread (lambda () (debug-msg "Thread")))))
(define t2 (thread-start! (make-thread (lambda () (thread-sleep! 5) (debug-msg "Thread Sleep")))))
(define (test) (debug-msg "Prime Thread") (thread-join! t1) (thread-join! t2)) ;; or (define (test2) (debug-msg "Prime Thread") (let ((threads-list (list t1 t2))) (for-each (lambda (t) (thread-join! t)) threads-list)))
;;(test) (test2)
we got the following transcripts
gsi (load "pepe2.scm")
***************** Prime Thread Using Display #<input-output-port #2 (console)> #<input-output-port #2 (console)> Using display with force output #<input-output-port #2 (console)> #<input-output-port #2 (console)> "Using write" #<input-output-port #2 (console)> #<input-output-port #2 (console)> ***************** Thread Using Display #<input-output-port #2 (console)> #<input-output-port #2 (console)> Using display with force output #<input-output-port #2 (console)> #<input-output-port #2 (console)> "Using write" #<input-output-port #2 (console)> #<input-output-port #2 (console)> ***************** Thread Sleep Using Display #<input-output-port #2 (console)> #<input-output-port #2 (console)> Using display with force output #<input-output-port #2 (console)> #<input-output-port #2 (console)> "Using write" #<input-output-port #2 (console)> #<input-output-port #2 (console)> "/home/pat/scheme-examples/pepe2.scm"
gsi pepe2.scm
***************** Prime Thread Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)> ***************** Thread Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)> ***************** Thread Sleep Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)>
gsc pepe2.scm gcc pepe2.c pepe2_.c -lgambc -o pepe2 ./pepe2
***************** Prime Thread Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)> ***************** Thread Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)> ***************** Thread Sleep Using Display #<input-port #2 (stdin)> #<output-port #3 (stdout)> Using display with force output #<input-port #2 (stdin)> #<output-port #3 (stdout)> "Using write" #<input-port #2 (stdin)> #<output-port #3 (stdout)>
Regards pat
Le samedi 04 juin 2005 à 16:36 -0300, leo lencioni a écrit :
Sorry for not giving all information. Here are the details. Attached is pepe.scm (my test program) I also attached the following transcripts
gsi-commandline (running pepe.scm in the interpreter from the command line) gsi-interactivo (running pepe.scm in the interpreter doing a (load "pepe.scm") gsc-commandline (running pepe.scm compiled) pepe.make (makefile for compiling pepe.scm)
As you see I get output from threads only when running in the interpreter and doing a load command.
So my suspicions are:
- Primordial thread finishing too early, and aborting all threads. as
indicated by Mr. Rault I will try with thread-join sentences so primordial will no end until all threads are finished. 2) Incorrectly setting up current-input/output-port to each thread in compiled code. so thread output goes to the correct place ....
Thanks for your help
On 6/4/05, ben@fuhok.net ben@fuhok.net wrote:
Are you using thread-join! to wait on the termination of the thread that is calling disp-msg?
It's kind of hard to debug this problem without seeing a little more of your code.
Regards,
Ben
On Sat, Jun 04, 2005 at 04:29:34AM -0300, leo lencioni wrote:
I'am a scheme newbie and trying to learm scheme. I have the following function:
(define (disp-msg msg) (display msg) (newline))
I'am using it inside inside a thread to print debug info.
(thread-start! (make-thread (lambda () (disp-msg "Hello")))
Running it inside GSI gives no problem and everithing goes well. But when I compile it they show no output. I'am compiling with gsc with no options. Linux/debian. Gambit 4.0 b13. What I'am doing wrong? I'am missing compiler options.
Thanks for your help _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list
Gambit-list mailing list Gambit-list@iro.umontreal.ca http://mailman.iro.umontreal.ca/mailman/listinfo/gambit-list