Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Progressbar - multithreading in access
zurück: acces form mit 2 kriterien öffnen weiter: ausgelesene txt Dateien sortieren Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
VBAY
Im Profil kannst Du frei den Rang ändern


Verfasst am:
11. Feb 2010, 18:47
Rufname:

Progressbar - multithreading in access - Progressbar - multithreading in access

Nach oben
       Version: Office XP (2002)

Hallo in die Runde,

trivial gestartet und plötzlich in der Sackgasse - please help!

Problem:

für eine lang rechnende Applikation soll per Progressbar die Zeit "gefühlt" verkürzt werden. Die Rechenzeit ist stabil - daher soll das der Einfachkeit halber rein zeitbasiert ablaufen.

Verkürzt: Statusbalken, der binnen t von 0 auf 100 läuft.

Mein Problem: wie lasse ich das Element "laufen" ohne dabei den eigentlichen Funktionsaufruf zu Blockieren? Gibt das eine Funktion der Klasse "von selber" her - übersehe ich da logisch etwas.
Code für Progressbar:
Code:
Button_Click()
    '...
    For i = 0 To 100
        Me.Progressbar.Value = i
        '...
        While Now() <= DateAdd("s",time,StartTime)
            DoEvents
        Wend
        '...
Blockiert mir natürlich automatisch den nachfolgenden Funktionsaufruf... also gar nicht clever...wie lösbar?

Aus meiner Sicht nur per Multithreading zu lösen... oder sehe ich den Wald vor lauter Bäumen nicht??

Please help...
VBAY
Sinister
Access-Programmierer


Verfasst am:
12. Feb 2010, 12:16
Rufname:


Re: Progressbar - multithreading in access - Re: Progressbar - multithreading in access

Nach oben
       Version: Office XP (2002)

Hallo,
VBAY - 11. Feb 2010, 17:47 hat folgendes geschrieben:
...daher soll das der Einfachkeit halber rein zeitbasiert ablaufen.
Das ist falsch, weil die Laufzeit abweichen kann. Und "zeitbasiert" ist in Access ziemlich kompliziert, weil es kein Multithreading gibt. D.h.: wenn Access wartet, kann es nichts anderes machen.
Wenn du deine "lang rechnende" Funktion in Schritte aufteilen konntest, zählt die Schleife bis %AnzahlSchritte% und statt zu warten wird ein Schritt ausgeführt. DoEvents aktualisiert die Bildschirmanzeige, einmal pro Durchlauf ist ein muss.

_________________
Warum einfach, wenn es kompliziert geht!?
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
14. Feb 2010, 17:04
Rufname:

AW: Progressbar - multithreading in access - AW: Progressbar - multithreading in access

Nach oben
       Version: Office XP (2002)

Hallo,

es gibt eine Möglichkeit, Tasks parallel laufen zu lassen. Jedes Formular hat einen Timer Event, der nach einer eingestellten Zeit in Millisekunden auslöst. Damit könnte man so eine zeitgesteuerte Progressbar sicherlich lösen, da der Timer-Event tatsächlich parallel zu sonstigem VBA-Code aufgerufen wird.

Der Timer-Event darf natürlich seinerseits nicht den restlichen Code durch irgendeine Warteschleife blockieren, denn im Gegensatz zu echtem Multithreading läuft der übrige VBA-Code nicht in Zeitscheiben weiter, sondern wartet, bis der Timer-Event mit seinem Job fertig ist.

Also kann man im Timer-Event die Progressbar einfach einen Tick weiterschreiben.

So ist das zwar lösbar, aber zum einen mußt Du bedenken, daß auch der Timer-Event und die Darstellung der Progressbar und das DoEvent Zeit benötigen, die die Berechnung auf jeden Fall bremst. Darüber hinaus können parallele Tasks anderer Anwendungen auf dem Rechner unterschiedliche Berechnungszeiten ergeben, so daß man niemals von "stabiler Rechenzeit" reden kann. Entsprechend steht Deine Progressbar irgendwann auf 100%, der User wartet aber immer noch, sehr unbefriedigend.

Da also die Berechnung von der Progressbar ohnehin gebremst wird, ist der bessere Weg immer, die in irgendeiner Form vorkommenden Schleifen in der Berechnung dazu zu verwenden, einen Wert zu berechnen, der den Minimal- und den Maximalwert ergibt. Wenn Du die ActiveX-Progressbar einbindest, brauchst Du Dich dabei nicht einmal mit der Umrechnung zu befassen, Du übergibst einfach den Minimalwert der Berechnung (zum Beispiel bei einer Schleife von 1 bis 23768 die 1) und den Maximalwert (die 23768) an die Progressbar, diese kümmert sich um die Umrechnung und Darstellung. Wenn der Schleifenzähler weiterzählt, übergibst Du den aktuellen Wert einfach an die Progressbar, die das dann entsprechend umrechnet. Dadurch wird auch die Berechnung geringfügig weniger belastet als durch einen zusätzlichen Timer-Event und Du kannst auch bei flexiblen Schleifenwerten immer sicher sein, daß der letzte Wert den 100% entspricht.

Gruß

Christian
VBAY
Im Profil kannst Du frei den Rang ändern


Verfasst am:
17. Feb 2010, 13:23
Rufname:

AW: Progressbar - multithreading in access - AW: Progressbar - multithreading in access

Nach oben
       Version: Office XP (2002)

Vielen Dank für die wirklich fundierte und super nachvollziehbare Antwort - absolut klasse!

Ich werde das Problem dann doch "sauber lösen" und aus einem Schleifen-Aufruf heraus übergeben - da die Berechnung äußerst zeit-konstant ist wäre die "unsaubere" Lösung einfach reizvoll gewesen Smile

Also: vielen Dank!

VBAY
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
17. Feb 2010, 20:03
Rufname:


AW: Progressbar - multithreading in access - AW: Progressbar - multithreading in access

Nach oben
       Version: Office XP (2002)

Hallo,

gern geschehen.
Übrigens gab es dazu auch mal einen Beitrag im Tips & Tricks Forum mit verschiedenen Ansätzen für eine Progress-Bar (ohne Verwendung der oben beschriebenen ActiveX-Methode):
Progressbar - Fortschrittsanzeige selbstgemacht

Gruß

Christian
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Programmierung / VBA: progressbar erstellen 12 leuchtkugel 157 29. März 2014, 06:43
Willi Wipp progressbar erstellen
Keine neuen Beiträge Access Formulare: Progressbar führt zu flackernden Formularen 1 StNeu 55 03. März 2014, 13:44
Bitsqueezer Progressbar führt zu flackernden Formularen
Keine neuen Beiträge Access Programmierung / VBA: Progressbar Status anzeigen 6 Boti 155 13. Jan 2014, 11:56
TommyK Progressbar Status anzeigen
Keine neuen Beiträge Access Tipps & Tricks: Progressbar - Fortschrittsanzeige selbstgemacht 8 AccessDenied 66507 31. Okt 2013, 14:02
alternativer nickname Progressbar - Fortschrittsanzeige selbstgemacht
Keine neuen Beiträge Access Formulare: Progressbar anzeigen, während Abfrage läuft(Aufruf Formular) 1 AntonBC 376 05. Okt 2012, 15:33
steffen0815 Progressbar anzeigen, während Abfrage läuft(Aufruf Formular)
Keine neuen Beiträge Access Formulare: Problem bei Progressbar in Statusbar 4 Babak 367 24. Sep 2012, 09:25
Babak Problem bei Progressbar in Statusbar
Keine neuen Beiträge Access Formulare: Progressbar ansprechen 3 Matze980237462345 485 20. Sep 2012, 12:10
Bitsqueezer Progressbar ansprechen
Keine neuen Beiträge Access Programmierung / VBA: Progressbar bei Aufruf eines Excel Moduls 7 Charlybraun 855 24. Mai 2012, 07:22
Bitsqueezer Progressbar bei Aufruf eines Excel Moduls
Keine neuen Beiträge Access Programmierung / VBA: ProgressBar 1 Trixihund 559 10. Apr 2010, 14:22
derArb ProgressBar
Keine neuen Beiträge Access Programmierung / VBA: Progressbar bei Erstellung Bericht unterdrücken 0 VBAY 345 23. Feb 2010, 10:01
VBAY Progressbar bei Erstellung Bericht unterdrücken
Keine neuen Beiträge Access Programmierung / VBA: Progress-Bar Update-Probleme (gelöst) 1 sepsys 2470 30. Okt 2009, 10:22
sepsys Progress-Bar Update-Probleme (gelöst)
Keine neuen Beiträge Access Formulare: Fake Progressbar 1 dermarcusd 1463 23. Okt 2008, 20:00
jens05 Fake Progressbar
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln