Still one problem. Arno fixed it (He sent a private message to me).
Move the line
FWndHandler := nil; // THIS ONE ADDED
from ThreadDetach to DeallocateHWnd so that the later looks like:
procedure TIcsWndControl.DeallocateHWnd;
begin
if FHandle = 0 then
Exit; // Already done
GWndHandlerPool.Lock;
try
FreeMsgHandlers;
if Assigned(FWndHandler) and (FWndHandler.FMsgCnt <= 0) then
GWndHandlerPool.FreeWndHandler(FWndHandler);
FHandle := 0;
FWndHandler := nil; // THIS ONE ADDED
finally
GWndHandlerPool.UnLock;
end;
end;
Thank to Arno.
--
Contribute to the SSL Effort. Visit http://www.overbyte.be/eng/ssl.html
--
[EMAIL PROTECTED]
http://www.overbyte.be
----- Original Message -----
From: "Francois PIETTE" <[EMAIL PROTECTED]>
To: "ICS support mailing" <[email protected]>
Sent: Monday, June 05, 2006 1:11 PM
Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
> Problem fixed !
>
> In OverbyteIcsHttpProt.pas, add:
>
> {$IFDEF COMPILER2_UP}
> procedure THttpCli.ThreadAttach;
> begin
> inherited ThreadAttach;
> FCtrlSocket.ThreadAttach;
> end;
>
> procedure THttpCli.ThreadDetach;
> begin
> inherited ThreadDetach;
> FCtrlSocket.ThreadDetach;
> end;
> {$ENDIF}
>
> Don't forget to add the declarations in the public section.
>
> In OverbyteIcsWndControl, add a line in ThreadDetach so that it looks
> like:
> procedure TIcsWndControl.ThreadDetach;
> begin
> if GetCurrentThreadID <> FThreadID then
> raise EIcsException.Create('Cannot detach from another thread');
> Self.DeallocateHWnd;
> FWndHandler := nil; // THIS ONE ADDED
> end;
>
>
> In OverbyteIcsWSocket.pas, delete the declaration of
> TCustomWSocket.FThreadID.
>
> That's it.
> Should work. At least it work in my small test prog:
> Create a form, drop a TButton, a TMemo and a THttpCli. Add the following
> code:
>
> unit OverbyteIcsSimpleThread1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
> Forms,
> Dialogs, StdCtrls, OverbyteIcsWndControl, OverbyteIcsWSocket,
> OverbyteIcsHttpProt;
>
> type
> TWorkerThread = class(TThread)
> public
> FHttpCli : THttpCli;
> procedure HttpCliRequestDone(Sender : TObject; RqType: THttpRequest;
> ErrCode : Word);
> procedure Execute; override;
> procedure ShowDoc;
> end;
>
> TForm1 = class(TForm)
> HttpCli1: THttpCli;
> DoButton: TButton;
> Memo1: TMemo;
> procedure DoButtonClick(Sender: TObject);
> private
> FWorkerThread : TWorkerThread;
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.dfm}
>
> procedure TWorkerThread.Execute;
> begin
> FHttpCli.ThreadAttach;
> FHttpCli.MultiThreaded := TRUE;
> FHttpCli.URL := 'http://localhost';
> FHttpCli.RcvdStream := TMemoryStream.Create;
> FHttpCli.OnRequestDone := HttpCliRequestDone;
> FHttpCli.GetASync;
> FHttpCli.MessageLoop;
> FHttpCli.ThreadDetach;
> FHttpCli.MultiThreaded := FALSE;
> end;
>
> procedure TWorkerThread.HttpCliRequestDone(Sender : TObject; RqType:
> THttpRequest; ErrCode : Word);
> begin
> FHttpCli.RcvdStream.Seek(0, 0);
> Synchronize(ShowDoc);
> FHttpCli.RcvdStream.Free;
> FHttpCli.RcvdStream := nil;
> PostMessage(FHttpCli.Handle, WM_QUIT, 0, 0);
> end;
>
> procedure TWorkerThread.ShowDoc;
> begin
> Form1.Memo1.Lines.LoadFromStream(FHttpCli.RcvdStream);
> end;
>
> procedure TForm1.DoButtonClick(Sender: TObject);
> begin
> HttpCli1.ThreadDetach;
> FWorkerThread := TWorkerThread.Create(TRUE);
> FWorkerThread.FreeOnTerminate := TRUE;
> FWorkerThread.FHttpCli := HttpCli1;
> FWorkerThread.Resume;
> end;
>
> end.
> --
> [EMAIL PROTECTED]
> http://www.overbyte.be
>
>
>
> ----- Original Message -----
> From: "Francois PIETTE" <[EMAIL PROTECTED]>
> To: "ICS support mailing" <[email protected]>
> Sent: Monday, June 05, 2006 12:25 PM
> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>
>
>> Yes, I found the problem. More complex to solve than what I thought
>> first.
>>
>> --
>> [EMAIL PROTECTED]
>> http://www.overbyte.be
>>
>> ----- Original Message -----
>> From: "Fastream Technologies" <[EMAIL PROTECTED]>
>> To: "ICS support mailing" <[email protected]>
>> Sent: Monday, June 05, 2006 11:37 AM
>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>
>>
>>> Francois,
>>>
>>> Have you been able to reproduce the problem there?
>>>
>>> Regards,
>>>
>>> SZ
>>>
>>> ----- Original Message -----
>>> From: "Fastream Technologies" <[EMAIL PROTECTED]>
>>> To: "ICS support mailing" <[email protected]>
>>> Sent: Sunday, June 04, 2006 6:24 PM
>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>
>>>
>>>> AFAIU, instead of FWindowHandle being defined as window, we now have
>>>> the
>>>> entire hierarchy being derived from a Twndcontrol which pools and
>>>> shares
>>>> the
>>>> windows. But I am clueless in terms of this bug as well. I sent a
>>>> private
>>>> email to Francois asking for consultancy about this.
>>>>
>>>> Thanks anyway,
>>>>
>>>> SZ
>>>>
>>>> ----- Original Message -----
>>>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>>>> To: "ICS support mailing" <[email protected]>
>>>> Sent: Sunday, June 04, 2006 6:06 PM
>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>
>>>>
>>>>> Fastream Technologies wrote:
>>>>>> Nothing changes. This is my second answer to this question as
>>>>>> sometimes my email server gets swamped :(...
>>>>>>
>>>>>> I still get the exception even though the package compiles with no
>>>>>> errors.
>>>>>
>>>>> Looks like a bit more complicated. Francois probably knows better how
>>>>> to fix it, I still haven't fully got the logic of the new version,
>>>>> sorry.
>>>>>
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> SZ
>>>>>>
>>>>>> ----- Original Message -----
>>>>>> From: "Arno Garrels" <[EMAIL PROTECTED]>
>>>>>> To: "ICS support mailing" <[email protected]>
>>>>>> Sent: Sunday, June 04, 2006 5:31 PM
>>>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem
>>>>>>
>>>>>>
>>>>>>> Fastream Technologies wrote:
>>>>>>>> It is used here:
>>>>>>>
>>>>>>> Yes I know, but what happens? As Francois already supposed it
>>>>>>> is in fact redefined and never assigned in TCustomWSocket.
>>>>>>>
>>>>>>>
>>>>>>> ---
>>>>>>> Arno Garrels [TeamICS]
>>>>>>> http://www.overbyte.be/eng/overbyte/teamics.html
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>>>>> Visit our website at http://www.overbyte.be
>>>>> --
>>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>>> Visit our website at http://www.overbyte.be
>>>>
>>>> --
>>>> To unsubscribe or change your settings for TWSocket mailing list
>>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>>> Visit our website at http://www.overbyte.be
>>>
>>> --
>>> To unsubscribe or change your settings for TWSocket mailing list
>>> please goto http://www.elists.org/mailman/listinfo/twsocket
>>> Visit our website at http://www.overbyte.be
>>
>> --
>> To unsubscribe or change your settings for TWSocket mailing list
>> please goto http://www.elists.org/mailman/listinfo/twsocket
>> Visit our website at http://www.overbyte.be
>
> --
> To unsubscribe or change your settings for TWSocket mailing list
> please goto http://www.elists.org/mailman/listinfo/twsocket
> Visit our website at http://www.overbyte.be
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be