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: 
1) 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