[Lazarus] lnet sockets, ´"eventer"
Michael Schnell
mschnell at lumino.de
Thu Oct 25 13:03:53 CEST 2012
On 10/25/2012 12:31 PM, Bernd wrote:
> The eventer that is used by default when putting an lnet component
> onto an LCL form is different from the other eventers that lnet
> provides. This one is tightly integrated into the LCL and fires its
> event from the main thread, just like button clicks and other GUI
> events.
Sounds nice.
> No sleeping and blocking is required here by your application
> and no worker threads.
I suppose you mean "...is required by the user to be handled". That
means that the waiting (here of course not "sleeping", as the "sleeping"
is done in the LCL) is done in some "magical" way in the guts of the
lnet code. This does sound nice. Could you explain how it is done and if
it is done in a _decent_ way (i.e. not performing any polling which
would introduce latency and CPU cycle overhead) ?
> All other eventers (select, epoll, kqueue) are only meant to be used
> when you explicitly not want the events to be generated by the LCL
> main thread,
Good for applications that don't use the LCL and (maybe) for using it in
worker Threads.
> These eventers always
> block.
That is what I understand an "eventer" does: It blocks until one of the
affiliated events is scheduled.
> They have a timeout, so you can make them wake up every x
> milliseconds but still they block all of the time.
So the events that can be affiliated are generated by the socket in
question plus a timeout. No more ?
> Thats the reason you
> should use the existing LCL eventers when you have LCL in your
> application,
What do you mean by "LCL eventers" (in fact I already searched the LCL
source code and "eventer" is nowhere to be found).
The only thing I see in the LCL that is an Eventer is the central Main
thread event queue, that calls all event handlers attached to events
generated by GUI, TTimer, TThread.Synchronize, QueueAsncCall,
PostMessage, ...
-Michael
More information about the Lazarus
mailing list