CLIM mail archive
| I have an application which uses two processes. Since converting to CLIM i have
| a new problem which might be related to the fact that both processes can
| be simultaneousely effecting the panes output history--yes this could be changed
| but it would require a great deal more work than i presently have budget for--.
| I saw the messages about using locks when interacting with the screen. Could
| someone provide a short snippet of code showing how one would use those
| unexported clim calls initial-lock-values and with-lockf? I understand how
| locks work but I don't have the foggiest which resources I need to associate
| with the lock in order to insure that one process doesn't change the output
| history record while the other process is trying to access it. Thanks.
I wrote the question to which locks were the answer. I had the same
problem you do. Instead of using Clim locks, I used the locks in
Allegro's multi-processing system. Since you have a multi-process
application, your lisp must have some sort of lock mechanism. My code
is very simple.
In Allegro, mp is the multiprocess package.
;; This creates a globally accessible lock.
(defvar display-lock (mp:make-process-lock))
In one process:
;; This waits until the lock is available before executing the body.
;; It then grabs the lock, locking out any other process that needs
;; this lock. (display-line write to the 'messages pane in IDM-frame.)
(mapc #'(lambda(L) (display-line L Stream)) Lines))
In the other process:
;; Same here.
(redisplay-frame-pane IDM-frame (get-frame-pane IDM-frame 'messages)))
It seems to work!
- From: Scott McKay <SWM@stony-brook.scrc.symbolics.com>
- From: Tom Trinko <email@example.com>
Main Index |