Fastream Technologies wrote: > Does it work there? Doesn't it give the exception?
It works! But does it work for you?? > > Regards, > > SZ > > ----- Original Message ----- > From: "Arno Garrels" <[EMAIL PROTECTED]> > To: "ICS support mailing" <twsocket@elists.org> > Sent: Friday, June 09, 2006 11:03 AM > Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem > > >> Below a simple test program, if you don't have ICS-SSL exchange >> TSslHttpCli by THttpCli. Does it work for you? >> >> unit Unit1; >> >> interface >> >> uses >> Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, >> Forms, >> Dialogs, OverbyteIcsWndControl, OverbyteIcsHttpProt, StdCtrls; >> >> type >> TMyThread = class(TThread) >> public >> procedure Execute; override; >> end; >> TForm1 = class(TForm) >> SslHttpCli1: TSslHttpCli; >> SslHttpCli2: TSslHttpCli; >> btnAttachTothread: TButton; >> btnAttachtoMainThread: TButton; >> procedure btnAttachTothreadClick(Sender: TObject); >> procedure FormCreate(Sender: TObject); >> procedure FormDestroy(Sender: TObject); >> procedure btnAttachtoMainThreadClick(Sender: TObject); >> private >> FThread : TMyThread; >> public >> { Public declarations } >> protected >> procedure WmAttachMain(var Msg: TMessage); message WM_USER + 3; >> end; >> >> var >> Form1: TForm1; >> >> implementation >> >> {$R *.dfm} >> >> { TMyThread } >> >> procedure TMyThread.Execute; >> var >> Msg: tagMsg; >> begin >> while GetMessage(Msg, 0, 0, 0) do >> begin >> if Msg.message = WM_USER + 1 then >> TSslHttpCli(Msg.WParam).ThreadAttach >> else if Msg.message = WM_USER + 2 then >> begin >> TSslHttpCli(Msg.WParam).ThreadDetach; >> Postmessage(Form1.Handle, WM_USER + 3, Msg.WParam, 0); >> end >> else begin >> TranslateMessage(Msg); >> DispatchMessage(Msg); >> end; >> end; >> Terminate; >> end; >> >> procedure TForm1.FormCreate(Sender: TObject); >> begin >> FThread := TMyThread.Create(False); >> end; >> >> procedure TForm1.FormDestroy(Sender: TObject); >> begin >> PostThreadMessage(FThread.ThreadID, WM_QUIT, 0, 0); >> end; >> >> procedure TForm1.WmAttachMain(var Msg: TMessage); >> begin >> TSslHttpCli(Msg.WParam).ThreadAttach; >> end; >> >> procedure TForm1.btnAttachtoMainThreadClick(Sender: TObject); >> begin >> PostThreadMessage(FThread.ThreadID, WM_USER + 2, >> Integer(SslHttpCli1), 0); >> PostThreadMessage(FThread.ThreadID, WM_USER + 2, >> Integer(SslHttpCli2), 0); >> end; >> >> procedure TForm1.btnAttachTothreadClick(Sender: TObject); >> begin >> SslHttpCli1.ThreadDetach; >> PostThreadMessage(FThread.ThreadID, WM_USER + 1, >> Integer(SslHttpCli1), 0); >> SslHttpCli2.ThreadDetach; >> PostThreadMessage(FThread.ThreadID, WM_USER + 1, >> Integer(SslHttpCli2), 0); >> end; >> >> end. >> >> // DFM // >> >> object Form1: TForm1 >> Left = 0 >> Top = 0 >> Caption = 'Form1' >> ClientHeight = 293 >> ClientWidth = 426 >> Color = clBtnFace >> Font.Charset = DEFAULT_CHARSET >> Font.Color = clWindowText >> Font.Height = -11 >> Font.Name = 'Tahoma' >> Font.Style = [] >> OldCreateOrder = False >> OnCreate = FormCreate >> OnDestroy = FormDestroy >> PixelsPerInch = 96 >> TextHeight = 13 >> object btnAttachTothread: TButton >> Left = 38 >> Top = 88 >> Width = 127 >> Height = 25 >> Caption = 'AttachTothread' >> TabOrder = 0 >> OnClick = btnAttachTothreadClick >> end >> object btnAttachtoMainThread: TButton >> Left = 38 >> Top = 119 >> Width = 127 >> Height = 25 >> Caption = 'AttachtoMainThread' >> TabOrder = 1 >> OnClick = btnAttachtoMainThreadClick >> end >> object SslHttpCli1: TSslHttpCli >> LocalAddr = '0.0.0.0' >> ProxyPort = '80' >> Agent = 'Mozilla/4.0 (compatible; ICS)' >> Accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, >> */*' NoCache = False >> ContentTypePost = 'application/x-www-form-urlencoded' >> MultiThreaded = False >> RequestVer = '1.0' >> FollowRelocation = True >> LocationChangeMaxCount = 5 >> BandwidthLimit = 10000 >> BandwidthSampling = 1000 >> Options = [] >> SocksAuthentication = socksNoAuthentication >> Left = 32 >> Top = 36 >> end >> object SslHttpCli2: TSslHttpCli >> LocalAddr = '0.0.0.0' >> ProxyPort = '80' >> Agent = 'Mozilla/4.0 (compatible; ICS)' >> Accept = 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, >> */*' NoCache = False >> ContentTypePost = 'application/x-www-form-urlencoded' >> MultiThreaded = False >> RequestVer = '1.0' >> FollowRelocation = True >> LocationChangeMaxCount = 5 >> BandwidthLimit = 10000 >> BandwidthSampling = 1000 >> Options = [] >> SocksAuthentication = socksNoAuthentication >> Left = 64 >> Top = 36 >> end >> end >> >> >> Fastream Technologies wrote: >>> Hello, >>> >>> ----- Original Message ----- >>> From: "Arno Garrels" <[EMAIL PROTECTED]> >>> To: "ICS support mailing" <twsocket@elists.org> >>> Sent: Thursday, June 08, 2006 7:48 PM >>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem >>> >>> >>>> Fastream Technologies wrote: >>>>> Arno, >>>>> >>>>> In the last code you sent, this problem STILL exists! >>>> >>>> I'm afraid, the fix below is in the code since Monday. >>> >>> Perhaps we need another -more comprehensive- fix. Francois, AFAIK >>> you were able to reproduce the problem, right? Could you check with >>> the latest code. Something must have gone bad because when I said >>> it was fixed, it was fixed. >>> >>>> >>>>> The other >>>>> problem was because of wrong package lib included in the project. >>>> >>>> What "other problem" do you mean (sounds very mysterious to me)? >>> >>> I mean the half downloads problem. That was because two ics packages >>> were linked. :o( Sorry for bothering you guys. Your suggestion that >>> the package was not good worked for me to find out... >>> >>> Best Regards, >>> >>> SZ >>> >>>> >>>>> Sorry for that. >>>>> >>>>> Best Regards, >>>>> >>>>> SZ >>>>> >>>>> ----- Original Message ----- >>>>> From: "Francois PIETTE" <[EMAIL PROTECTED]> >>>>> To: "ICS support mailing" <twsocket@elists.org> >>>>> Sent: Monday, June 05, 2006 2:35 PM >>>>> Subject: Re: [twsocket] ICSv6 Thread Attach/Detach problem >>>>> >>>>> >>>>>> 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" <twsocket@elists.org> >>>>>> 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" <twsocket@elists.org> >>>>>>> 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" <twsocket@elists.org> >>>>>>>> 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" <twsocket@elists.org> >>>>>>>>> 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" <twsocket@elists.org> >>>>>>>>>> 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" <twsocket@elists.org> >>>>>>>>>>>> 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 >>>> -- >>>> 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