What is the best way to create threads that will prevent a program from 
exiting until they have completed their work?   I'd like to be able to do 
this implicitly, without cooperation from the main thread.

My first experiment uses `shift` to insert uses of `thread-wait` after the 
rest of the program:

```
#lang racket
(require racket/control)

(define (thread/wait proc)
  (define t (thread proc))
  (shift k (k t) (thread-wait t)))

(define t1 (thread/wait (lambda () (let loop () (displayln "t1") (sleep 2) 
(loop)))))
(define t2 (thread/wait (lambda () (let loop () (displayln "t2") (sleep 3) 
(loop)))))

(displayln "end of main thread")
```

This doesn't work, seemingly due to an implicit `reset`/`prompt` around 
each top-level definition/expression in a module.

Wrapping the entire module in a trivial `(let () _)` fixes the issue, but 
this is not desirable:

```
#lang racket
(require racket/control)

(let ()
  (define (thread/wait proc)
    (define t (thread proc))
    (shift k (k t) (thread-wait t)))

  (define t1 (thread/wait (lambda () (let loop () (displayln "t1") (sleep 
2) (loop)))))
  (define t2 (thread/wait (lambda () (let loop () (displayln "t2") (sleep 
3) (loop)))))

  (displayln "end of main thread"))
```

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/e67b750a-1d9d-42fa-9712-9c03da5475a8n%40googlegroups.com.

Reply via email to