[Delphi]internet componenten killen

Pagina: 1
Acties:

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
ok, ik heb dus een programma, met wat internet componenten erop..

nu heb ik 3 probleempjes:
probleem 1
de eerste is dat wanneer ik dat programma wil afsluiten
(form1.close / application.terminate)

dat ik moet wachten tot al die internet sessies ge-time-out zijn.

Nu vroeg ik me af of je niet bij het afsluiten kan zeggen
NMHTTP1.cancel; <-- bestaat
en dat ie dan direct kapt
het probleem is dus dat ie dat bij cancel dus niet doet

misschien wil het ook wel om het hele programma op een andere manier te killen, zodat ik geen errors krijg en toch snel afsluit.


probleem 2
Ik heb dus die internet componentjes, maar op het moment dat ik dan NMHTTPx.get('xxx'); doe dan schiet de cpu belasting naar de 90%... :(
Application.ProcessMessages; heb ik er al bij staan, maar dat maakt niks uit.. :/

nu vroeg ik me dus af of je ergens prioriteit in kan stellen.

probleem 3
wanneer ik windows afsluit, en dat programma draait nog dan wil windows niet afsluiten, maar wacht op dat programma todat het handmatig gekilled is.

Dat ligt aan windows messaging (ws_closequerry enzo)
Nu heb ikzelf win98SE, en daar gaat het goed, maar wanneer het op een NT based (NT, 2k, XP) OS gedraait word dan krijg je dus dat probleem.
In Delphi zit er een OnCloseQuery functie, maar dat lijkt weinig effect te hebben.. :(
is er iets wat ik over het hoofd zie, of klopt het dat die onCloseQuery van Delphi 5 niet goed is?

ik zal hier mijn shudown code even neerzetten
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  Application.ProcessMessages;
  nmhttp1.Cancel;
  nmhttp2.Cancel;
  form1.Visible:=false;
  if configarray[98] = '1' then begin
    try
    poort1.clear;
    poort1.free;
    sleep(150);
    except
    end;
  end;

  nmhttp1.Cancel;
  NMhttp1.Disconnect;
  nmhttp2.Cancel;
  NMhttp2.Disconnect;

  NMpop31.Abort;
  NMpop31.Disconnect;
  NMpop32.Abort;
  NMpop32.Disconnect;

zoals je ziet heb ik nu NMpop3x.Abort, en daarna xx.Disconnect gebruikt, maar dat gaat dus niet helemaal naar wens

Ik hoop dat iemand me kan helpen ;)

This message was sent on 100% recyclable electrons.


Verwijderd

Ik ken die componenten niet echt, gebruik ze nooit. Maar het is misschien een idee om connecten enzo in een thread te gooien die kun je ten alle tijde killen en ook de prio van instellen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op maandag 29 april 2002 12:02 schreef BasieP het volgende:
ok, ik heb dus een programma, met wat internet componenten erop..

nu heb ik 3 probleempjes:
probleem 1
de eerste is dat wanneer ik dat programma wil afsluiten
(form1.close / application.terminate)

dat ik moet wachten tot al die internet sessies ge-time-out zijn.

Nu vroeg ik me af of je niet bij het afsluiten kan zeggen
NMHTTP1.cancel; <-- bestaat
en dat ie dan direct kapt
het probleem is dus dat ie dat bij cancel dus niet doet
NMHTTP1.free of .destroy? Niet getest, maar het lijkt me dat een internet object wel iets heeft om toch meteen af te kunnen sluiten.
misschien wil het ook wel om het hele programma op een andere manier te killen, zodat ik geen errors krijg en toch snel afsluit.


probleem 2
Ik heb dus die internet componentjes, maar op het moment dat ik dan NMHTTPx.get('xxx'); doe dan schiet de cpu belasting naar de 90%... :(
Application.ProcessMessages; heb ik er al bij staan, maar dat maakt niks uit.. :/

nu vroeg ik me dus af of je ergens prioriteit in kan stellen.
In een thread gooien. Maar als het NMHTTP object zijn eigen thread aanmaakt kan het wel eens misgaan. Trouwens.. 90%?? In D5 heb ik een ooit eens een app. gemaakt die wat info van het internet trok (weer en verkeer zooi vanaf de ANWB site) m.b.v. het NMHTTP object. Kan me niet herinneren dat er zoveel cpu usage was.
probleem 3
wanneer ik windows afsluit, en dat programma draait nog dan wil windows niet afsluiten, maar wacht op dat programma todat het handmatig gekilled is.

Dat ligt aan windows messaging (ws_closequerry enzo)
Nee hoor, dit ligt aan jou programma. Waarschijnlijk omdat die NM objecten nog bezig zijn met het één of ander en dus niet meteen willen sluiten sluit je programma niet.
Nu heb ikzelf win98SE, en daar gaat het goed, maar wanneer het op een NT based (NT, 2k, XP) OS gedraait word dan krijg je dus dat probleem.
In Delphi zit er een OnCloseQuery functie, maar dat lijkt weinig effect te hebben.. :(
En je zet wel canclose op true? Dit is trouwens alleen voor het sluiten van je form. Als er echter op het form dingen staan die niet willen sluiten, dan zit je.
is er iets wat ik over het hoofd zie, of klopt het dat die onCloseQuery van Delphi 5 niet goed is?

ik zal hier mijn shudown code even neerzetten
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  Application.ProcessMessages;
  nmhttp1.Cancel;
  nmhttp2.Cancel;
  form1.Visible:=false;
  if configarray[98] = '1' then begin
    try
    poort1.clear;
    poort1.free;
    sleep(150);
    except
    end;
  end;

  nmhttp1.Cancel;
  NMhttp1.Disconnect;
  nmhttp2.Cancel;
  NMhttp2.Disconnect;

  NMpop31.Abort;
  NMpop31.Disconnect;
  NMpop32.Abort;
  NMpop32.Disconnect;

zoals je ziet heb ik nu NMpop3x.Abort, en daarna xx.Disconnect gebruikt, maar dat gaat dus niet helemaal naar wens
Deze code staat waar? In de onclosequery? In de onclose? In de ondestroy?

Probeer dit eens in de onclosequery te zetten, en zet dan canclose op true. Het kan nog wel zo zijn dat je app. pas afsluit als de NM objecten daadwerkelijk geen connectie meer hebben (dit was bij mij het geval, en draaide op een NT4 systeem).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

En mocht je echt radicaal willen werken...
code:
1
2
3
4
Procedure Main_Form.FormClose;
begin
  TerminateProcess(Application.Handle);
end;

Boem. Afgesloten. >:)

Forget your fears...
...and want to know more...


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 20:19

Tomatoman

Fulltime prutser

Ik heb ooit een programma gemaakt dat op de achtergrond van computers draaide en diverse gebruikers hadden problemen bij het afsluiten van hun computer als dat programma nog draaide. Het werkte met een standaard TNMUDP component. Na heel veel uren testen ben ik erachter gekomen dat TNMUDP (en waarschijnljk alle socket-gebaseerde standaard-componenten in Delphi) gewoonweg niet afsluit als de applicatie sluit |:(. Bij mij verhinderde dat het afsluiten van die computers. Ik heb allerlei trucs geprobeerd, maar niets bleek te werken. Ook via nieuwsgroepen heb ik geen oplossing gevonden :(.

TerminateProcess is wel heel radicaal, maar misschien werkt het. Ik heb het nooit geprobeerd.

Een goede grap mag vrienden kosten.


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Ik wel. Het werkt. Win32 API call die gewoon ALLE threads gerelateerd aan het process termineert. Gevaarlijk ivm gegevensverlies/memory leaks... Maar memleaks zijn bij het afsluiten van Winblows geen probleem... (reboot wiped 't geheugen toch).

TerminateThread is de thread variant ervan, wellicht een ideetje om de threads van de TNN componenten daarmee hardhandig op te blazen?

Overigens, mijn progsel dat van TNNHTTP en TNNFTP gebruik maakt (en van TNNMSG) heeft geen sluitproblemen zover ik weet. Zeker dat je code wel clean is?

Forget your fears...
...and want to know more...


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Declaration
procedure Cancel;

Description
The Cancel method cancels the current input or output operation, and disconnects from the remote host.

Note:
When the Cancel method is called, an exception is raised.
Exceptie niet afgevangen? Als het main form al weg is kan ie geen error message meer displayen -> Hang. (TRY Blaat EXCEPT ELSE END; doet wonderen).
Disconnect is iig niet nodig hierna.
O, en Abort:
Declaration
procedure Abort; virtual;

Description
The Abort method aborts the current operation. This method is overridden in the descendant classes, because each protocol has different requirements to abort an operation.
Geen disconnect, geen error. Dit is niet wat je nodig hebt.

Forget your fears...
...and want to know more...


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
Op maandag 29 april 2002 14:03 schreef Creepy het volgende:
NMHTTP1.free of .destroy? Niet getest, maar het lijkt me dat een internet object wel iets heeft om toch meteen af te kunnen sluiten.
access violation.. en dan niks meer.
Op maandag 29 april 2002 14:03 schreef Creepy het volgende:
In een thread gooien. Maar als het NMHTTP object zijn eigen thread aanmaakt kan het wel eens misgaan. Trouwens.. 90%?? In D5 heb ik een ooit eens een app. gemaakt die wat info van het internet trok (weer en verkeer zooi vanaf de ANWB site) m.b.v. het NMHTTP object. Kan me niet herinneren dat er zoveel cpu usage was.
goed id, heb ik ook op irc gehoord enzo, maar ik zou niet weten hoe het moet, en op irc werd het opeens heel stil toen ik het vroeg.. :(

En je zet wel canclose op true? Dit is trouwens alleen voor het sluiten van je form. Als er echter op het form dingen staan die niet willen sluiten, dan zit je.
[/quote]
dat laatste is denk ik het geval
Op maandag 29 april 2002 14:03 schreef Creepy het volgende:
Deze code staat waar? In de onclosequery? In de onclose? In de ondestroy?

Probeer dit eens in de onclosequery te zetten, en zet dan canclose op true. Het kan nog wel zo zijn dat je app. pas afsluit als de NM objecten daadwerkelijk geen connectie meer hebben (dit was bij mij het geval, en draaide op een NT4 systeem).
het staat in de onclose en de onclosequery
Op maandag 29 april 2002 14:49 schreef Aetje het volgende:
Exceptie niet afgevangen? Als het main form al weg is kan ie geen error message meer displayen -> Hang. (TRY Blaat EXCEPT ELSE END; doet wonderen).
Disconnect is iig niet nodig hierna.
werkt niet dus
dan krijg ik een Access violation.
ook met try except

This message was sent on 100% recyclable electrons.


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Probeer in de Application.HandleExeptions een soort van vangbak te creeren: In de OnClose ff een boolean (FProgramTerminating) op true zetten en dan in de application.handleexeptions,
code:
1
2
3
if FProgramTerminating then 
  on EAccessViolation do
    Application.Terminate;

Should work. Maar volgens mij wil een component niet dood omdat ie nog threads open heeft... Check dat.

Forget your fears...
...and want to know more...


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
owja..
code:
1
2
if GetExitCodeThread(Application.Handle, ECode) = true then
  TerminateProcess(Application.Handle,Ecode);

werkt dus NIET
waarschijnlijk ook door die stomme netmasters componentjes..

(btw.. met indy is het hetzelfde)

This message was sent on 100% recyclable electrons.


Verwijderd

Indien niet nodig, geen blocking gebruiken maar async/non-blocking (components) gebruiken.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
daar heb ik idd ook al naar gezocht, en die zijn er volgens mij gewoon niet voor http access

maar iedereen wijst me naar Indy, maar dat wil net zo hard niet als NM.

maar threads lijkt me een goed id, maar ik zou niet weten hoe

This message was sent on 100% recyclable electrons.


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Op maandag 29 april 2002 15:48 schreef BasieP het volgende:
owja..
code:
1
2
if GetExitCodeThread(Application.Handle, ECode) = true then
  TerminateProcess(Application.Handle,Ecode);

werkt dus NIET
waarschijnlijk ook door die stomme netmasters componentjes..

(btw.. met indy is het hetzelfde)
WAAAT? Dit -MOET- werken! Da's Windows die tegen de app zegt: Jij gaat dood, je resources zijn nu van mij! Mail de source van dat appje es naar me door, hier wil ik vanavond wel n's mee stoeien : Aetje@hotmail.com...

Forget your fears...
...and want to know more...


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
Creepy zei dit eens een keer
.........En je zet wel canclose op true? Dit is trouwens alleen voor het sluiten van je form. Als er echter op het form dingen staan die niet willen sluiten, dan zit je.

Probeer dit eens in de onclosequery te zetten, en zet dan canclose op true. .......


sorry, maar ik kan dat hele canclose niet vinden.. :?
form1.canclose bestaat niet
application.canclose bestaat niet
zelfs nmhttp1.canclose niet

This message was sent on 100% recyclable electrons.


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
Op maandag 29 april 2002 15:54 schreef Aetje het volgende:

[..]

WAAAT? Dit -MOET- werken! Da's Windows die tegen de app zegt: Jij gaat dood, je resources zijn nu van mij! Mail de source van dat appje es naar me door, hier wil ik vanavond wel n's mee stoeien : Aetje@hotmail.com...
nou sorry, maar de source is van Smartie, en is nogal veel, en je hebt veel componentjes nodig enzo, ik denk niet dat dat gaat lukken...

maar het werkt echt niet...
hij wacht gewoon nog lekker tot ik hem handmatig kill

This message was sent on 100% recyclable electrons.


Verwijderd

Op maandag 29 april 2002 15:52 schreef BasieP het volgende:
daar heb ik idd ook al naar gezocht, en die zijn er volgens mij gewoon niet voor http access
voor http access?
Dan doe je je GET's toch zelf? Zo moeilijk is dat niet. Ik heb hier geen Delphi maar een standaard TClientSocket kun je volgens mij gewoon op non-blocking zetten.

Gewoon connecten naar poort 80 van de machine, dan zoiets sturen als "GET /blah.html HTTP/1.0\n\n" en het ClientSocketRead event heeft een gevulde Socket.ReceiveText voor je.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
en kun je dat component wel killen als jij dat zegt?
of gaat ie ook eerst wachten totdat zijn timeout tijd over is?

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op maandag 29 april 2002 15:58 schreef BasieP het volgende:
Creepy zei dit eens een keer
.........En je zet wel canclose op true? Dit is trouwens alleen voor het sluiten van je form. Als er echter op het form dingen staan die niet willen sluiten, dan zit je.

Probeer dit eens in de onclosequery te zetten, en zet dan canclose op true. .......


sorry, maar ik kan dat hele canclose niet vinden.. :?
form1.canclose bestaat niet
application.canclose bestaat niet
zelfs nmhttp1.canclose niet
in de onclosequery van je form zet je:
code:
1
canclose:=true;

canclose is een var parameter van de onCloseQuery event!
Als je canclose op false zet, zal je form nooit sluiten (tenzijn windows hem er hard uitgooit). Met true zal je form wel sluiten.

(iets zegt me dat je de form.onclosequery toch niet hebt gebruikt, aangezien de canclose duidelijk in de declaratie en in de help staat.)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
nou sorry hoor, ik heb echt die onclosequery gebruikt, maar ik kan natuurlijk niet ruiken dat je daar reserved vars hebt.. |:(

maar zo werkt het dus nog steeds niet.

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op maandag 29 april 2002 16:49 schreef BasieP het volgende:
nou sorry hoor, ik heb echt die onclosequery gebruikt, maar ik kan natuurlijk niet ruiken dat je daar reserved vars hebt.. |:(
Als je in de object inspector dubbelklikt op de OnCloseQuery, dan staat de canclose rechtstreeks in je code,
code:
1
Procedure TForm1.OnCloseQuery(Sender: TObject; var canClose: Boolean);

en ook in de help staat deze var duidelijk aangegeven.
maar zo werkt het dus nog steeds niet.
Post al je code om af te sluiten eens (dus de onclose, onclosequery etc. ). Dan probeer ik het hier ff onder XP na te spelen, en kijken of ik er wat aan kan doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
je weet niet wat je zegt, maar ok :)

even voor de duidelijkheid, het gaat dus om meerdere (maximaal 10) blocking internet components :(
bij mij dus NMHTTP
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
ECode:DWORD;

begin
  try
    while timer1.enabled=true do timer1.enabled:=false;
    while timer2.enabled=true do timer2.enabled:=false;
    while timer3.enabled=true do timer3.enabled:=false;

    nmhttp1.cancel;
    nmhttp2.cancel;
    nmhttp3.cancel;
    nmhttp4.cancel;
    nmhttp5.cancel;
    nmhttp6.cancel;
    nmhttp7.cancel;
    nmhttp8.cancel;
    nmhttp9.cancel;

  except
    if GetExitCodeThread(Application.Handle, ECode) = true then
    TerminateProcess(Application.Handle,Ecode);
  end;
end;

de oncloseQuery is hetzelfde.
suc6

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Hmm.. je hebt het over maximaal 10 NMHTTP componenten, maar ik zie maar 9 keer de cancel staan??

Anyways.. zal vanavond of morgen avond ff kijken of het aan de NMHTTP componenten kan liggen dat je app. niet afsluit (tenziij iemand anders me voor is natuurlijk :) )

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
ow sorry, ik kan niet tellen, het waren er 9, maar ik heb ze iig wel allemaal.

maar 9 of maakt ook niet zo'n verschil

This message was sent on 100% recyclable electrons.


  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Op maandag 29 april 2002 16:01 schreef BasieP het volgende:

[..]

nou sorry, maar de source is van Smartie, en is nogal veel, en je hebt veel componentjes nodig enzo, ik denk niet dat dat gaat lukken...

maar het werkt echt niet...
hij wacht gewoon nog lekker tot ik hem handmatig kill
Maar dit IS een handmatige kill. Precies hetzelfde gebeurt! WinAPI call naar terminateprocess, met de ID van het proces. Check eens ff of je code dat punt uberhaupt wel bereikt (zet een watch).

Forget your fears...
...and want to know more...


Verwijderd

Zijn die componenten niet event driven (bv ondata ofzo) want als je get doet dan gaat tie staan pollen totdat er data is ontvangen op de socket (vandaar de hoge cpu)

Je kunt beter event driven werken, Socket ontvangt data genereerd ondata event daar doe je get en je hebt direct data.

Zo kan je programma niet 'hangen' wat er voor zorgt dat je niet kunt afsluiten.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 12:09

Delphi32

Heading for the gates of Eden

Heb je al geprobeerd wat de NM demo projectjes doen op dit front? Ik niet, maar ik kan je zeker aanraden om, als je problemen hebt met de NetMaster componenten, de demo projecten te openen, runnen en je probleem na te bootsen.
Tien tegen één dat je probleem dan daar niet optreedt... dan weet je dus dat je toch moet gaan speuren naar je eigen fout (ben ik sowieso bang voor als ik de voorgaande posts lees).

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
Op woensdag 01 mei 2002 00:40 schreef Aetje het volgende:

[..]

Maar dit IS een handmatige kill. Precies hetzelfde gebeurt! WinAPI call naar terminateprocess, met de ID van het proces. Check eens ff of je code dat punt uberhaupt wel bereikt (zet een watch).
done, hij komt er... 1 ms voordat ie zichzelf killed.. dus het wachten is idd op die componentjes.. :(
Op woensdag 01 mei 2002 02:22 schreef XSDnied het volgende:
Zijn die componenten niet event driven (bv ondata ofzo) want als je get doet dan gaat tie staan pollen totdat er data is ontvangen op de socket (vandaar de hoge cpu)

Je kunt beter event driven werken, Socket ontvangt data genereerd ondata event daar doe je get en je hebt direct data.

Zo kan je programma niet 'hangen' wat er voor zorgt dat je niet kunt afsluiten.
ja dat zou idd beter zijn, maar ik zou niet weten hoe ik dan info van internet moet halen...
Op woensdag 01 mei 2002 11:08 schreef Delphi32 het volgende:
Heb je al geprobeerd wat de NM demo projectjes doen op dit front? Ik niet, maar ik kan je zeker aanraden om, als je problemen hebt met de NetMaster componenten, de demo projecten te openen, runnen en je probleem na te bootsen.
Tien tegen één dat je probleem dan daar niet optreedt... dan weet je dus dat je toch moet gaan speuren naar je eigen fout (ben ik sowieso bang voor als ik de voorgaande posts lees).
ook dat heb ik gedaan, en toen was het precies hetzelfde probleem..
ik denk echt dat het probleem zich voordoet omdat het blocking compo's zijn.. :(

This message was sent on 100% recyclable electrons.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Je zal toch echt moeten wachten op die componenten denk ik. Krijg hier hetzelfde effect (zoals verwacht). Pas als ze niet meer bezig zijn, kan je app. worden afgesloten.

Het niet kunnen afsluiten onder 2000/XP heb ik hier geen last van, dus zal echt aan iets anders liggen dan aan die NM componenten.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
nou dan verander ik hierbij me vraag...

hoe kan ik html code (of alleen de text,zonder tags) in mijn programma openen

op een NON-blocking (betere) manier

This message was sent on 100% recyclable electrons.


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 12:09

Delphi32

Heading for the gates of Eden

Op woensdag 01 mei 2002 22:43 schreef BasieP het volgende:
nou dan verander ik hierbij me vraag...

hoe kan ik html code (of alleen de text,zonder tags) in mijn programma openen

op een NON-blocking (betere) manier
Indy is toch helemaal op non-blocking gebaseerd? Zou ik sowieso voor gaan hoor; die NM dingen zijn leuk als demo maar verder niet. De Indy componenten zijn veel beter regelbaar, die doen tenminste wat jij wilt.

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
nou dat dacht ik ook, maar ik heb het wel is met indy compo's geprobeerd, en toen had ik hetzelfde als dat ik nu heb

This message was sent on 100% recyclable electrons.


Verwijderd

Heeft iemand dit kunnen reproduceren? Mij lukt het iig niet.

Als ik kijk wat de code van NetMaster doet, zie ik aanroepen van Sleep afgewisseld met aanroepen van Application.ProcessMessages. En tussendoor aanroepen van send, recv etc. van WinSock.

De WM_CLOSE van windows zal dus gewoon doorkomen, zodat de NMHTTP1.Cancel oid aangeroepen wordt, en - bij mij iig :) - de NMHTTP component uit zijn loop breekt.

Waar je wel op moet letten is dit:
code:
1
2
3
4
5
6
7
8
begin
  try
    NMHTTP1.Get(Edit1.Text);
  except
  end;
  X;
  Y;
end;

Omdat de componenten blocking zijn [eigenlijk semi-, want ze roepen de hele tijd Application.ProcessMessages aan] zal de uitvoering van code stoppen bij NMHTTP1.Get(Edit1.Text).

Als je hierna op een event [bv WM_CLOSE] NMHTTP1.Cancel aanroept zal de code uitvoering verder gaan bij X, dan Y etc. Ik zag dat je in de FormCloseQuery een object Free-ed, dat kan dan problemen geven.

Ik heb jouw probleem bij mij dus niet kunnnen reproduceren; maar misschien komt dat omdat je naar een bepaalde site gaat ofzo, waar de winsock recv op blokkeert oid.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 20:19

Tomatoman

Fulltime prutser

Je zal toch echt moeten wachten op die componenten denk ik. Krijg hier hetzelfde effect (zoals verwacht). Pas als ze niet meer bezig zijn, kan je app. worden afgesloten.

Het niet kunnen afsluiten onder 2000/XP heb ik hier geen last van, dus zal echt aan iets anders liggen dan aan die NM componenten.
Dat is precies wat ik heb gemerkt met een TNMUDP component :(. Het probleem treedt alleen op bij Windows 9x/ME.

Ik heb de indruk dat ieder socket component via winsock.dll of zo een apart proces op de achtergrond maakt, dat in Windows 9x soms nog een tijdje op de achtergrond blijft runnen als je applicatie gesloten wordt. Vandaar dat Windows 9x soms ook niet kan afsluiten als een (Delphi) app met een socket component nog draait. Weet iemand of dit kan kloppen?

Een goede grap mag vrienden kosten.

Pagina: 1