Seite 1 von 1

Schleife

Verfasst: 14.10.2009 18:34
von SIS
Hallo,
mal wieder bräuchte ich kurz Hilfe, bei einem Anfängerproblem. Ich möchte beim betätigen eines Knopfes ein ProgressBarGadget und einen Messagerequester auslösen, die jedoch zeitgleich- parallel ausgeführt werden. Dieses Problem löst man bekanntlich mit einer Schleife- doch mir gelingt es leider nicht, dies umzusetzen. :(

Code: Alles auswählen

Case #Button
        
       While  EventGadget()=#Button
         For a=1 To 100000
           SetGadgetState(6,a)
         Next
          If ReadFile(0,"\\Server\server\Programme\Server\online.txt")                            
             zeile$  =   ReadString(0)                                                     
             MessageRequester("Server","SERVER"+zeile$,0)                        
             CloseFile(0)                                                         
          Else                                                             
            MessageRequester("Error","Fehlgeschlagen.",0)  
          EndIf
        Wend
Ich denke hier wird nicht der komplette Code benötigt.
Vielen Dank, im Voraus für eure Hilfe! :)

Re: Schleife

Verfasst: 14.10.2009 18:55
von Kiffi
Hallo SIS,

um ProgressBarGadget() und einen Messagerequester() gleichzeitig laufen zu lassen,
wirst Du nicht umhinkommen, einen von beiden Prozessen in einen Thread auszulagern.

Allerdings ist das nicht ganz trivial. Man muss dabei 'ne Menge beachten und das ganze
ist auch nicht mit 2 1/2 Sätzen erklärt.

Deshalb hier meine Frage: Was willst Du überhaupt machen? Vielleicht kann man Dein
Problem anders (gleich einfacher gleich einsteigerfreundlicher) lösen.

Grüße ... Kiffi

Re: Schleife

Verfasst: 15.10.2009 12:22
von SIS
Hallo Kiffi,

Ich möchte einfach die "Ladezeit" des Kopiervorgangs beschreiben, wie es aus meinem oben aufgeführten Code ersichtlich ist.
Wenn der "Kopiervorgang" erfolgreich war, oder eben nicht, soll eine Message erscheinen.

Re: Schleife

Verfasst: 15.10.2009 12:41
von Kiffi
SIS hat geschrieben:wie es aus meinem oben aufgeführten Code ersichtlich ist.
nöh, das ist nicht aus dem Code ersichtlich. Das einzig offensichtliche ist, dass Du eine Zeile aus einer Textdatei ausliest.

Mein Glaskugel flüstert mir, dass es nun mehrere Möglichkeiten gibt:

1. Dein Kopiervorgang besteht darin, dass Du aus online.txt Daten zeilenweise irgendwo anders hinschreiben willst

2. In der aus online.txt ausgelesenen Zeile liest Du eine Information heraus, die dann die Datei beinhaltet, die Du kopieren willst.

3. Die aus 2. ermittelte Datei willst Du entweder aus dem INet downloaden oder ganz 'normal' kopieren.

<lalal>1, 2 oder 3. Du musst Dich entscheiden. Drei Felder sind frei.</lala> :-)

Grüße ... Kiffi

Re: Schleife

Verfasst: 15.10.2009 15:20
von Andesdaf
Progressbar gefällig?
http://www.purebasic.fr/german/viewtopi ... iervorgang

Ist jetzt nur für normale Dateien, bezieht sich auf Kiffis 3b.

Re: Schleife

Verfasst: 19.10.2009 11:24
von Kaeru Gaman
was aus dem Codeschnippsel klar ersichtlich ist, ist ein allgemeines Verständnisproblem.

PureBasic ist prozedural, nicht objektorientiert.
Das bedeutet, wenn man eine Schleife laufen läßt, dann wird genau diese schleife abgearbeitet, und währenddessen nichts anderes.
Also macht dein Code folgendes:
sobald der Button gedrückt wird, zählt er heimlich still und leise bis Hunderttausend, erst dann wird versucht, die Datei zu öffnen.
von dem Zählvorgang bekommt man nicht einmal etwas mit, weil du zwar SetGadgetState drin hast,
aber die Events nicht zwischendrin verarbeitest, der Fortschritt wird also nicht sichtbar.

ganz allgemein hast du die Wahl, solch einen Vorgang in der Hauptschleife in einem Parallelvorgang zu verarbeiten,
oder aber in einem Thread, das ist komfortabler aber komplizierter.

Wie Kiffi schon sagte, was du wirklich wie kopieren willst ist nicht ersichtlich,
in deinem Beispiel liest du nur eine einzige Textzeile aus der Datei, da dauert nichts lang genug um einen Fortschrittsbalken zu benötigen.
So wie dein Snippet aussieht, wäre volle Funktionalität erreicht, wenn du die Schleife und das SetGadgetState(6,a) einfach weglässt.