Schleife

Anfängerfragen zum Programmieren mit PureBasic.
SIS
Beiträge: 7
Registriert: 07.10.2009 16:31

Schleife

Beitrag 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! :)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Schleife

Beitrag 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
a²+b²=mc²
SIS
Beiträge: 7
Registriert: 07.10.2009 16:31

Re: Schleife

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Schleife

Beitrag 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
a²+b²=mc²
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Schleife

Beitrag von Andesdaf »

Progressbar gefällig?
http://www.purebasic.fr/german/viewtopi ... iervorgang

Ist jetzt nur für normale Dateien, bezieht sich auf Kiffis 3b.
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Schleife

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten