[Lazarus] lnet sockets

Antonio Fortuny a.fortuny at sitasoftware.lu
Thu Oct 25 10:42:08 CEST 2012


Le 25/10/2012 09:50, Michael Schnell a écrit :
> On 10/24/2012 05:43 PM, Bernd wrote:
>> It is not clear to me what exactly "the application needs to wait"
>> should exactly mean in this context.
> I think, in a socket-related application, it is rather obvious that the
> application needs to wait on data from the socket to arrive. (Same with
> Pipes, Async Interfaces, ...)
You got it. This is how the WinCE application runs:
user reacts on a Form
the appropriate form event is lauched
   some information is needed from the server before carry on any 
further processing
   ask the net server:
     open connection
     send request
     wait for answer
     close connection
     decide what to do next in case of any error
     process answer and do whatever has to be done
this means that the application Q cannot be used: the user event method 
cannot be exited before the answer to the remote server. The application 
is freezed, ok.

> And while waiting, the application needs to be able to react on other
> "Events" (e.g. those that are generated by the LCL in the standard way
> (such as Mouse and Keyboard - generated, TTimer, ... )
that's what I'm looking for
, and that it is
> important to reduce Latency and CPU overhead a much as possible,
in my case it dosn't matter if some mili-seconds are spent. It is an 
application on hand help devices used in point of sales departments.
  to me
> the obvious way top go is use a blocking read in a thread and have the
> thread insert (mix with the other events) a main thread event by
> QueueAsyncCall (which is platform independent and created exactly for
> that purpose).
Right, but does that mean that the lnet cpmponent should be into the 
thread range ? Otherwise I don't see how to have the component defined 
in the main thread scope and have an event active in an independent thread
>
> Of course in this picture a TTimer can be use to manage receive timeouts
> (e.g. close the socket and kill the thread).
Sounds good for me:
wrapper around the TLTcp
   includes the working thread
   a Timer is set with tth timeout limit
   an event is created and reset when request is started
   the application enters WaitForSingleObject(Event)
   if Timer fires before the thread has terminated,
     the event is set
     some flag is set showing timeout
   if thread terminates in time
     data is moved to main thrad space
     it sets the event
   don't care for buffer share: thread writes it, main app reads only
     anf timer does not use it
   don't care for event share: whichever comes first sets it
   whatever event occurred, thread is terminated and destroyed
>
> -Michael
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>





More information about the Lazarus mailing list