Een programma stoppen

Status
Niet open voor verdere reacties.

andreaugust

Gebruiker
Lid geworden
7 jan 2012
Berichten
105
Ik heb de volgende vraag.
Een ontworpen programma maakt continue berekeningen.
Dit programma stopt maar door een handeling van mij.
Bij het stoppen wens ik dat het programma met nog enkele bepaalde opdrachten behoorlijk sluit.
Ik tracht dit te doen door met de knop STOPPEN volgende te coderen

Applications.doevents
' de opdrachten
...
...
...
end

Somtijds lukt het en somtijds reageert het programma niet op mijn knopklik
Ik kan natuurlijk het programma stoppen met taakbeheer.
Maar hoe kan ik er dan voor zorgen dat de handelingen geschieden.
Of zijn er nog andere mogelijkheden?
Dank voor enig antwoord
 
Hoi,

Maak je die berekeningen in de main thread of gebruik je daarvoor een aparte thread?
Als je geen aparte thread gebruikt, dan moet je misschien eerst daarnaar kijken.
Als je wel een aparte thread gebruikt, dan kan het een oplossing zijn om eerst de thread te sluiten, dan de laatste opdrachten nog te doen en dan het programma nog eens te sluiten.

Ik hoop dat het zo lukt!:thumb:
MartinJM
 
Martin,
Kan je uitleg geven betreffende de thread.
Ik denk dat ik bewust hiermede nog niet gewerkt heb en ken dit onderwerp niet (denk ik).
Wat mijn programma betreft :
De berekeningen geschieden in een public sub opgenomen in een module.
En in de code van de form1 bevindt zich de code van de stop knop.
Dank al voor uw reactie
 
Je hebt de Main thread, waarin het programma de basis dingen doet. Als je daarin grote berekeningen gaat uitvoeren, zal het programma ook bevriezen. Dan is er de mogelijkheid om te multithreaden. Meer info daarover kan je hier vinden: http://msdn.microsoft.com/en-us/library/eed6swsx%28v=vs.80%29.aspx
Maar dan heb je nog het probleem dat je informatie van de ene naar de andere thread moet sturen. Normaal gaat dat niet (makkelijk), maar dat is ook op te lossen met een simpel regeltje code bij het form.load event:
[CPP]CheckForIllegalCrossThreadCalls = False[/CPP]
Maar daarmee hebben we nog geen thread gemaakt. Dat doen we zo:
[CPP]Private ThrBerekeningen As New System.Threading.Thread(AddressOf Thread1)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ThrBerekeningen = New System.Threading.Thread(AddressOf Thread1)
ThrBerekeningen.Start()
End Sub

Private Sub Thread1()
''// Doen wat je wil
End Sub[/CPP]
Hierbij moet je er wel voor zorgen dat je de thread niet 2 keer kan starten. Doordat er niet meer op "Illegal Cross Thread Calls" gecheckt wordt, kan je vanuit de thread nu de gegevens zo in een control op je form wegschrijven.

Succes! :thumb:
MartinJM

Ps: Een thread aborten doe je zo:
[CPP]ThrBerekeningen.Abort()[/CPP]
Hiervoor moet de thread wel aanstaan geloof ik, anders krijg je een error. Of de thread bezig is kan je zo controleren:
[CPP]If ThrBerekeningen.IsAlive Then
ThrBerekeningen.Abort()
End If[/CPP]
Ik hoop dat dit voldoende info is :)
 
Martin,
Ik ga dit bestuderen en trachten toe te passen.
Ik laat u dan nog iets weten.
Dank u.
 
Martin,
Nog een vraagje in verband hiermede.
Vanuit de Release zet ik een snelkoppeling van de exe naar het bureaublad.
Hiermede, daar mijn CPU 4 kernen heeft kan ik het programma simultaan 4 keer runnen.
Kan dit van belang zijn in het verhaal van de tread ?
 
Ik geloof het niet, ook al is het met multithreading volgens mij wel mogelijk om je programma sneller te maken... Taakbeheer blijft het ook als 1 proces zien. Ik ben er niet zeker van, maar als het belangrijk is kan je het vast wel op internet vinden na wat speurwerk ;)

Verder betekend cores niet dat je een proces maar keer kan starten, alleen als het proces veel rekenkracht gebruikt zal het minder zin hebben...


Ik heb ook nog een vraagje: Wat maak je dat je zoveel rekenkracht nodig hebt?

MartinJM
 
Wel, ik doe altijd mede aan wiskundige programmering wedstrijden.
Altijd zijn het resultaten die slechts optimaal kunnen bekomen worden door benevens allerlei invallen,trukjes, formules en methoden ook terzelfder tijd Monte Carlo toe te passen en dat men bij wijze van spreken voor onbepaalde tijd laat zoeken.
En ik denk dat vb.net zo krachtig geworden is als andere programmeertalen.
Vandaar mijn vragen, Martin.
 
Als je echt snelle programma's wil gaan maken moet je misschien toch naar assembler kijken. Vb.net en vele andere programmeertalen werken namelijk via een ander programma. Zo kan je bijvoorbeeld geen vb.net applicaties opstarten als je het .NET Framework niet hebt. Het is toch weer een extra schakel, die mij doet vermoeden dat het toch net iets minder snel is. Het kan zijn dat het niet zo is, maar het is toch een vermoeden...

Die wedstrijden klinken wel leuk :)

Is de vraag zo verder opgelost?

MartinJM
 
Natuurlijk is assembler veel sneller maar "onmenselijk" om hiermede voor de fun programma's te maken.
Het moet nog leuk blijven.
De vraag is hiermede opgelost.
Ik dank u voor uw medewerking.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan