there are more than 20 clients asking for data at random time. I
wanted simultaneous connections serve immediately. My be i really do
not need it, but i want to try.
I try to send OnClientRead event to the thread like this:
procedure TService1.ServerSocket1ClientRead(Sender: TObject; Socket:
TCustomWinSocket);
...
NewThread.Event := ServerSocket1.OnClientRead(Self, ?);
but what i must put as parameters?
In the thread:
type
TEchoThread = class(TThread)
private
{ Private declarations }
FEvent: Integer;
...
public
property Event: integer write FEvent;
...
while not Terminated do // loop around until we should stop
begin
if WaitForSingleObject(FEvent, INFINITE) = WAIT_OBJECT_0 then
begin
...
Can this work?
Kind regards,
Dmitri
--- In [email protected], "Ronny Aerts [grasoft]"
<[EMAIL PROTECTED]> wrote:
>
> You don't need a thread for every tcp/ip socket connection. When
your application works fine in a form, you can reuse this form when
create and activate it from the start of service.
>
> kind regards,
> Ronny Aerts
> Belgium
>
> ----- Original Message -----
> From: dts124
> To: [email protected]
> Sent: Saturday, April 21, 2007 1:37 PM
> Subject: [Norton AntiSpam] [delphi-en] Re: service with threads
for socket connections
>
>
> --- In [email protected], "dts124" <dmitri.tsvetikov@> wrote:
>
> there was a suggestion to use WaitForSingleObject for thread to wait
> for next message:
>
> procedure TEchoThread.Execute;
> var
> Str: string;
> begin
> while not Terminated do
> begin
> if WaitForSingleObject(SomeEvent, INFINITE) = WAIT_OBJECT_0 then
> begin
> begin
> Str := IntToStr(FSockHnd) +' '+ IntToStr(FConnIndx) +' '+ FBuff;
>
> Service1.ServerSocket1.Socket.Connections[FConnIndx].SendText(Str);
> end;
> end;
> end;
> end;
>
> Question: how to pass ServerSocket1 OnClientRead event of the main
> thread to WaitForSingleObject function of thread?
>
> dts124
> ------------------------------
> >
> > I am trying to port a working "Form" application (medical DICOM
> > worklist server) to service. The application is answering to
multiple
> > possibly concurrent connections, so i assume there must be separate
> > thread for each existing connection. Connections (and threads) are
> > closed after the requested data is sent.
> >
> > For now my test service just echoes back text string received from
> > client with addition of connection handle number.
> >
> > Problem:
> > after 1-st client connection CPU usage of this service is
50%(probably
> > because my CPU is Pentium D), after 2nd - 99% and remains 99% until
> > service is stopped regardless that all clients are disconnected.
> >
> > After i added Sleep(10); into
> > "while not Terminated do" loop of procedure TEchoThread.Execute;
> > CPU usage dropped to 0, now it seems OK, but is this the right
way to
> > arrange service with threads for socket connections?
> >
>
>
>
>
>
> [Non-text portions of this message have been removed]
>