Вызов интерфейса пользователя CLIM из приложения - PullRequest
4 голосов
/ 21 октября 2010

Чтобы запустить интерфейс пользователя CLIM, должна быть вызвана универсальная функция clim: run-frame-top-level, однако эта функция блокируется до выхода из интерфейса. Казалось бы, для этого требуется, чтобы все управление приложениями осуществлялось через верхний уровень CLIM.

Возможно ли структурировать приложение по-другому, так что устанавливается поток управления вне верхнего уровня CLIM, который просто взаимодействует с рамкой приложения при необходимости?

1 Ответ

3 голосов
/ 21 октября 2010

Большинство реализаций Common Lisp, которые поддерживают CLIM, имеют способ запускать функции как отдельный поток (обычно называемый PROCESS в Lisp).

Во многих реализациях Common Lisp эта функция называется PROCESS-RUN-FUNCTION. Смотрите документацию вашего Лисп.

У самого CLIM есть функция MAKE-PROCESS. Это не зависит от реализации и работает на реализациях CLIM поверх многопоточных Lisp, таких как Allegro CL, LispWorks, MCL, Genera, ...

Нечто подобное (пример в пакете CLIM-USER).

(make-process (lambda () (run-frame-top-level ...)))

должен запускать верхний уровень в своем собственном потоке.

Это позволит вам запускать несколько кадров, иметь другие процессы Lisp с REPL и т. Д.

...