[Lazarus] lnet sockets
Antonio Fortuny
a.fortuny at sitasoftware.lu
Wed Oct 24 16:42:55 CEST 2012
Le 24/10/2012 15:14, Michael Schnell a écrit :
> IHMO, the optimum way to handle waiting on sockets, pipes, asnyc
> interfaces and similar stuff is to do a blocking read in a thread, use
> QueueAsyncCall() to notify the main thread (i.e. throw an event) when
> something has arrived and use a TThreadList (or something similar) to
> transfer the data from the worker thread to the main thread.
I know Indy does something like that too. But i'm afraid to go inside.
In my vision, the wait with timeout problem is simply moved into a
thread. The application has still to wait on something to happe.
Because the client application can be blocked waiting for an answer from
the TCP/IP server, it is acceptable that the user waits for something to
happen.
I gonna try to use an Event tied to a timer and the socket receive event.
Event.ReSet;
Socket.SendMesssage;
Timer.Enabled := True;
WaitForSingleObject(Event);
On another hand, when the timer fires, it will execute in the event code:
Event.Set;
and when the socket has received all the message
Event.Set;
Question is: The two pieces of code for the timer(1) and the socket(2)
will they be active when the main thread enters the wait state thru the
WaitForSingleObject ?
No problem for the timer, it is the OS responsiblity to run, but the
socket ?
The last idea is to move the socket into a thread so it can run
independently of the application and set the Event when either all data
has benn rea od the timer fires.
>
> I do know that this works fine with Windows and Linux.
>
> I have no idea about CE (and never will).
>
> -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