| |

Fortgeschrittene ProgrammierungRe: Stack abbrechen | |  | Autor: quickmic | Datum: 21.11.07 12:26 |
| "DoEvents ist dafür da, die Kontrolle ans Betriebssystem zurück zu geben, um asynchrone Ereignisse wie Maus- und TastaturEvents zu verarbeiten" ... Leuchtet ein. Darum geht auch die Timer-Methode, weil das Timer-Event vom OS kommt.
Dein Bsp klappt auch bei mir, aber eben leider genau wie ich es nicht brauchen kann.
Warum das ganze mit dem Doevents nicht klappen kann, ist mir nun auch klar. Sowas in die Richtung hab ich ja bereits vermutet.
Leider bin ich jetzt etwas ratlos...
Du meinst entweder Code (Timer) ändern, oder Threads machen.
"Besser auslagern in eine Sub/Funktion. Du kannst ja nun noch ein Flag setzen, dass TestStack oder hier test es gemacht hat und dann entsprechend den Code ablaufen lassen."
Der Code steht natürlich bereits in einer Sub/Function drin, aber er wird von mehreren Stellen im Code und immer wieder in etwas modifizierter Form, benötigt. Ich kann da also keinen Timer einbauen, der mir nach Schema F den 2.Teil des Codes ausführt.
Ausserdem wird das ganze dann unglaublich unübersichtlich und hässlich.
z.b.
Einmal benötige ich einen Stack bei den SQL-Kommandos-Unterprogramm (Da sind dann die Auswahlfilter drin). Das kann z.b. mehrere Sek dauern bis die Recordsets geladen sind, und 2. Beim Füllen des Flexgrids, was wieder einige Sek dauern kann.
Ich kann daher eigentlich die Timer-Methode schon nahezu ausschliessen.
Bleibt also noch die Methode mit den Threads.
Leider erinnere ich mich mit Grauen an den letzten Versuch mit VB Threads hinzubekommen. Diese Methode möchte ich daher nur im Absoluten Notfall einsetzen.
Ich möchte aber nochmal vielleicht auf die Klassenmodul-Methode zurückkommen, die ich am Anfang kurz erwähnt hab.
Vielleicht ist ja mit diesem Weg mehr anzufangen, zumindest hatte ich bis jetzt den "grössten" Erfolg mit diesem Code:
Im Form1:
Option Explicit
Private class1() As class1
Private counter As Integer
Private Sub Command1_Click()
If (Not Not class1) <> 0 Then 'Array dimensioniert?
class1(0).cancel
Set class1(0) = Nothing
Erase class1
ReDim class1(0)
Set class1(0) = New class1
class1(0).Stacktest
Else
ReDim class1(0)
Set class1(0) = New class1
class1(0).Stacktest
Set class1(0) = Nothing
Erase class1
End If
MsgBox "Durchlauf fertig"
End Sub Im Class1:
Option Explicit
Private cancelflag As Boolean
Private RunnningFlag As Boolean
Public Sub cancel()
cancelflag = True
End Sub
Public Sub Stacktest()
Dim i As Long
RunnningFlag = True
For i = 0 To 10000
Form1.Label1 = Str(i)
DoEvents
If cancelflag Then
cancelflag = False
Exit For
End If
Next
RunnningFlag = False
End Sub Das Problem hier ist, dass zwar "Stacktest" im Klassenmodul abgebrochen (ich würde eher sagen abgewürgt) wird, aber das 1.Button-Event nicht sofort beim abwürgen beendet wird.
Kann man da noch was optimieren, oder bleibt wirklich nur der Weg mit den Threads?
mfg
quickmic |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevGraph (VB/VBA) 
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|