"The shell stopped unexpectedly and Explorer.exe was restarted."
Ik heb er niet zoveel verstand van, maar moet dat niet zijn 'if Threadrunning == True then Thread.Terminate();'?Op maandag 24 december 2001 20:23 schreef jelmervos onder andere:
...
if ThreadRunning = True then Thread.Terminate;
...
Ik ben maar een leek hoor...
Bram
Check topic titel, staat toch duidelijk [Delphi]

De syntax is verder goed hoor, anders kreeg ik die code toch niet door de compiler???
De syntax is verder goed hoor, anders kreeg ik die code toch niet door de compiler???
"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Als je Thread.Terminate aanroept wordt alleen de de boolean FTerminated op True gezet.
In de meeste Execute's van een thread ziet de code er als volgt uit:
Dus als het goed is zal je thread wel eindigen na het aanroepen van Terminate, maar dit kan nog ff duren; ligt eraan hoe lang 'DoeIets' duurt.
De class TThread heeft ook nog een method WaitFor, die wacht tot de thread eindigd; dus zet zoiets in je Destroy:
In de meeste Execute's van een thread ziet de code er als volgt uit:
code:
1
2
| while not Terminated do DoeIets; // DoeIets is een procedure die niet al te lang duurt |
Dus als het goed is zal je thread wel eindigen na het aanroepen van Terminate, maar dit kan nog ff duren; ligt eraan hoe lang 'DoeIets' duurt.
De class TThread heeft ook nog een method WaitFor, die wacht tot de thread eindigd; dus zet zoiets in je Destroy:
code:
1
2
| MyThread.Terminate; MyThread.WaitFor; |
nou ja, ik heb het geprobeerd...
Aha, het komt er dus op neer dat ik of moet wachten (WaitFor) of ik moet while not terminated gebruiken. Maar in de Thread zelfs is dat DoeIets maar 1 regel, namelijk een TXMLDocument op Active := True zetten. Dit kan nog wel es wat langer duren, omdat hij de data van internet haalt.
Ik kan dus niet de Thread DIRECT stoppen en toch het geheugen goed vrij maken?
Ik kan dus niet de Thread DIRECT stoppen en toch het geheugen goed vrij maken?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Je kunt de win api TerminateThread gebruiken, maar dit staat in de help:
Maar wat is die TXMLDocument, Delphi 6 ofzo?TerminateThread is a dangerous function that should only be used in the most extreme cases. You should call TerminateThread only if you know exactly what the target thread is doing, and you control all of the code that the target thread could possibly be running at the time of the termination. For example, TerminateThread can result in the following problems:
[..]
Yep, Enterprise. Maar denk jij dat het slim is die ThreadTerminate te gebruiken?Op maandag 24 december 2001 20:56 schreef DiFool het volgende:
Maar wat is die TXMLDocument, Delphi 6 ofzo?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Verwijderd
Nee, is denk ik niet slim.
Je zult het denk ik in die TXMLDocument moeten zoeken; maar daar kan ik helaas niets over zeggen; heb hier wel Delphi 6 liggen; maar nog geen tijd/zin gehad om het te installeren.
Maar als je je mainform hide-t en gewoon WaitFor aanroept, is dat een probleem?
Je zult het denk ik in die TXMLDocument moeten zoeken; maar daar kan ik helaas niets over zeggen; heb hier wel Delphi 6 liggen; maar nog geen tijd/zin gehad om het te installeren.
Maar als je je mainform hide-t en gewoon WaitFor aanroept, is dat een probleem?
Denk het niet, zal het na de nachtrust proberen.Op maandag 24 december 2001 21:09 schreef DiFool het volgende:
Maar als je je mainform hide-t en gewoon WaitFor aanroept, is dat een probleem?
"The shell stopped unexpectedly and Explorer.exe was restarted."
Heb het ff getest, maar het werk helemaal niet.
Zodra je de app afsluit en de WaitFor functie aanroept van de Thread die dan dus draait dan geeft ie zodra de Thread klaar is deze error:
Zodra je de app afsluit en de WaitFor functie aanroept van de Thread die dan dus draait dan geeft ie zodra de Thread klaar is deze error:
Klinkt als een probleem van het XMLDocument, omdat die Nederlands is (Windows).System Error. Code 6.
De ingang is ongeldig.
"The shell stopped unexpectedly and Explorer.exe was restarted."
Hee, nu werkt het goed, maar ik weet niet of dit de goede oplossing is: ik heb gewoon de FreeOnTerminate weggehaald bij het aanmaken (en starten) van de Thread.
Hoe kan dit? Ik denk niet dat dit goed is, omdat hij nu een memory-leak heeft.
Hoe kan dit? Ik denk niet dat dit goed is, omdat hij nu een memory-leak heeft.
"The shell stopped unexpectedly and Explorer.exe was restarted."
uhmm even denken
lifecycle van een thread:
1. Create(...)
2. Execute() (while not terminated do {iets} )
3. Terminate()
4. Free()
Waar het nu op lijkt het er op dat na stap 4 er nog objecten iets opvragen uit die thread. Dat geeft een AV.
Nu heb je 'free on terminate' uitgezet, waardor het opvragen van onzin uit je thread geen AV oplevert. Erg handig, maar het niet free-en van je thread is idd een memoryleak.
je zult uit moeten vogelen waar die AV exact veroorzaakt wordt. Op dat punt wordt er namelijk gelezen van je threadobject dat ondertussen gefreed is. Omdat je exeption niet noodzakelijkerwijs gegenereerd op het moment dat er gelezen word uit je object gelezen word, maar mogelijk ook later kan worden gegenereerd, wens ik je veel sterkte...
lifecycle van een thread:
1. Create(...)
2. Execute() (while not terminated do {iets} )
3. Terminate()
4. Free()
Waar het nu op lijkt het er op dat na stap 4 er nog objecten iets opvragen uit die thread. Dat geeft een AV.
Nu heb je 'free on terminate' uitgezet, waardor het opvragen van onzin uit je thread geen AV oplevert. Erg handig, maar het niet free-en van je thread is idd een memoryleak.
je zult uit moeten vogelen waar die AV exact veroorzaakt wordt. Op dat punt wordt er namelijk gelezen van je threadobject dat ondertussen gefreed is. Omdat je exeption niet noodzakelijkerwijs gegenereerd op het moment dat er gelezen word uit je object gelezen word, maar mogelijk ook later kan worden gegenereerd, wens ik je veel sterkte...
Localhost, sweet localhost
Pagina: 1