From: Jacques Garrigue <garrigue@math.nagoya-u.ac.jp>
To: shawjef3@msu.edu
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] three different labltk behaviors
Date: Sun, 05 Aug 2007 19:28:30 +0900 (JST) [thread overview]
Message-ID: <20070805.192830.98869896.garrigue@math.nagoya-u.ac.jp> (raw)
In-Reply-To: <46B5123A.9020702@msu.edu>
From: Jeff Shaw <shawjef3@msu.edu>
> Ocaml community,
> For fun I wrote a version of Life for ocaml +labltk.
>
> http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
>
> Here are the 3 ways I've tried to run it and the results:
>
> 1. compile to bytecode or native:
> "Fatal error: exception Protocol.TkError("Tcl/Tk not initialised")"
>
> 2. #load all the libraries into the toplevel (or give them as command
> line arguments) then #use "lifemain.ml":
> works
>
> 3. Run the toplevel with "lifemain.ml" as an argument:
> gives an empty Tk window
>
> The results are the same on Mac OS X and Windows XP (mingw).
There are two problems:
1) There is a buglet in Tkthread, which was originally intended to be
used only with the toplevel. Namely, the Tkthread.sync command executes
immediately in the current thread if there is no tk thread
running. This is to avoid deadlocks, but the new tk thread
registers itself, so there is a race condition if sync is called
immediately after Thread.start. For the time being, this can be
fixed by inserting
Thread.delay 0.001
2) You must "join" the tk thread before exiting, otherwise you will
exit immediately.
So you should correct the beginning of lifemain.ml with
open Tkthread
let tkth = start ()
let () = Thread.delay 0.001
and at the end of lifemain.ml
let () = Thread.join tkth
With this it works at least under unix.
Hope it helps.
Jacques Garrigue
prev parent reply other threads:[~2007-08-05 10:28 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-04 23:56 Jeff Shaw
2007-08-05 2:28 ` [Caml-list] " Eric Cooper
2007-08-05 10:28 ` Jacques Garrigue [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070805.192830.98869896.garrigue@math.nagoya-u.ac.jp \
--to=garrigue@math.nagoya-u.ac.jp \
--cc=caml-list@inria.fr \
--cc=shawjef3@msu.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox