On 12/01/2011 05:29 PM, Felipe Monteiro de Carvalho wrote:
I think that the 5 or so APIs from the LCL that deal with lower level
events (PostMessage, QueueAssyncCall, SendMessage, etc) could be
implement with a timer and an event queue. The rest of the LCL does
not require direct interaction with an event queue, it can also work
through direct events from the OS.
I don't think that this needs to be be implemented "on top" of TTimer.
But in fact (if the "GUI-backend" does not provide this function) TTimer
does need a queue that uses OS-based non-busy waiting at the output of
the queue and an OS-based way to generate the time-based (thus
asynchronous) events as an input into the queue. The asynchronous
Mainthread Signaling features need the same stuff, only that the input
into the queue is generated by a thread. (In fact TTimer can be
implemented using a thread that performs an OS-API "sleep" and when
woken generates an input into the queue and goes back to sleep again.)
This is rather easy to do. The tricky thing is merging the events that
are generated by the GUI background with those that are generated by
threads (or other directly OS-API based function).
- "ifi" (the backend is attached via a bidirectional byte stream such as a
pipe, a socket or an asynchronous port.
LCL-Android worked like that, attached via pipes to the Java side. It
actually worked OK.
Great !
So I vote for doing an class-inheritance based or otherwise flexible
implementation that allows for switching the actual transport when
adding new backend variants (such as "none" "pipe", "IP-socket" or
"asynchronous".
- http (the backend is done in java script and runs in a browser, the
connection is done using the http protocol<see ExtPascal / ExtJS>)
I think that it would work badly due to latency and it would load a
lot the server.
Of course you are right that this is a performance hog. "FastCGI" and
(on Microsoft IIS) ISAPI will need to be used. "Comet" could reduce the
polling overhead (for server->Browser events) but I heard that it is not
very reliable. OTHO AFAIK there are several working (non Pascal)
projects using EXTJS. So I suppose this should be doable. Obviously this
is a lot of work and the look and feel will be very different vs a
standard LCL GUI. But in the past, here, there have been a lot requests
for CGI programs with an LCL based GUI in the Browser.
-Michael
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus