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
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus