=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
From:    Ruvim Pinka <ruvim@forth.org.ru>
To:      All <spf-dev@lists.sourceforge.net>
Date:    Sunday, May 12, 2002, 9:43:55 PM
Subject: [Spf-dev] CALLBACK
Files:   <нет>
--====----====----====----====----====----====----====----====----====----===--
Привет!

in answer to Nicholas Nemtsev, 16.04.2002 21:07

NN> Что касается скорости, то меня больше беспокоит скорость обработки
NN> оконных сообщений (WNDPROC:). Ведь для обработки каждого сообщения
NN> вызывается USER-INIT с созданием хипа и т.д., что кстати добавляет еще
NN> одну проблему - отсутствие доступа к USER-переменным текущей задачи.
NN> Но как решить эту проблему (хип не выделять, а работать с хипом
NN> текущего потока (EDI)) - не знаю.

тут нет проблемы.

CALLBACK-функцию вызывает операционная система,
из своего потока. В этом потоке нету никаких
структур и данных нашей форт-системы (т.к. этот
поток создан не форт-системой).

По хорошему, соответствующее слово не должно
обращаться ни к каким user-переменным..
Но это сильное ограничение, т.к. многие слова ядра
форт-системы пользуют user-переменные, и эти слова
могут понадобится в нашем CALLBACK-слове.

Поэтому приходится вначале создавать в чужом потоке
наше форт-окружение, используя USER-INIT ( или FORTH-INSTANCE> )
а потом его подчищать за собой USER-EXIT ( или <FORTH-INSTANCE )

Можно самому создать быструю CALLBACK-функцию
на основе _WNDPROC-CODE ,но принять все соответствующие
ограничения (в том числе, распределять память на чистом API).

: QUICK_WNDPROC ( xt "name" -- )
  CREATE  ( -- enter_point )
  WNDPROC-CODE COMPILE,
  ,
;
И правда, почему бы словам, созданным by CALLBACK ,не возвращать
просто свою точку входа ?
- это будет более портабельно, чем получать эту точку
входа через [']

: MyCallBackProc ( -- )
  S" test passed" -11 GetStdHandle WRITE-FILE DROP
;
' MyCallBackWord QUICK_WNDPROC MyCallBackProc
MyCallBackProc ( -- addr ) API-CALL
test passed Ok


WBR
__________
Ruvim



_______________________________________________________________

Have big pipes? SourceForge.net is looking for download mirrors. We supply
the hardware. You get the recognition. Email Us: bandwidth@sourceforge.net
_______________________________________________
Spf-dev mailing list
Spf-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spf-dev

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

