Seite 1 von 2
Minimiertes Fenster wieder darstellen
Verfasst: 29.10.2006 21:53
von ms
Ich habe ein Fenster erstellt mit den Standardeigenschaften (minimieren,maximieren,schließen). In diesem Fenster laufen längere Berechnungen (ca. 60 min) und eine Zeitanzeige. Wenn ich dieses Fenster minimiere erscheint es unten in der Taskbar. Es lässt sich aber nicht wieder herstellen während die Berechnungen laufen (CPU Last = 100 %). Nach Ende der Berechnungen ist eine Wiederherstellung problemlos möglich - mit allen Inhalten.
Hat jemand eine Idee ?
Verfasst: 29.10.2006 22:00
von Joel
Ja ist mir auch schon öfters passiert, man müsste beim Maximieren den Prozess in eine Art Pause versetzen (Wie beim Task-Manager bei Windows 98 SE) das Fenster dann Maximieren und dann weiter berechnen lassen.
Verfasst: 29.10.2006 22:49
von Kaeru Gaman
innerhalb der berechnungsschleife ein WindowEvent() einfügen.
wenn die berechnung in geschachtelten schleifen stattfindet,
vielleicht nicht in der innersten schleife.
Code: Alles auswählen
For Zeile = 0 to 999
For Spalte = 0 to 999
Berechnung(Zeile,Spalte)
Next
WindowEvent()
Next
Verfasst: 29.10.2006 23:03
von ms
WindowEvent() funktioniert. Man muss sich aber bei geschachtelten Schleifen sehr genau überlegen wo man diesen Befehl aufruft. Den Unterschied in den Auswertezeiten werde ich noch einmal testen. Aber generell ist dieser Weg OK.
Danke Kaeru
Verfasst: 29.10.2006 23:05
von Hellhound66
Zweite Möglichkeit:
Das Hauptprogramm besteht nur auf ner Endlosschleife mit WaitWindowEvent(). Alle weiteren Dinge werden in seperaten Threads behandelt.
Verfasst: 30.10.2006 17:25
von a14xerus
Ist mit Threads auf jeden Fall eleganter, aber auch gefährlicher
Verfasst: 30.10.2006 18:49
von Kaeru Gaman
yo genau.
die lösung per threads ist vorzuziehen, wenn man damit sicher umgehen kann.
als schnellösung ist das einfache beispiel der eventbehandlung zwischendrin ausreichend.
Verfasst: 31.10.2006 01:37
von Sir0Kuhl
was könnte mit threads denn schief gehen?
Verfasst: 31.10.2006 04:46
von Deeem2031
Die Frage, was nicht schiefgehen kann, wäre wahrscheinlich schneller zu beantworten

Verfasst: 31.10.2006 12:31
von mk-soft
Immer diese Panikmache mit den Threads.
Folgende Regeln beachten:
- Mehrfaches starten verhindern
- String nicht in mehreren Thread verarbeiten. (Möglich bei PB4 mit Option Threadsave)
Code: Alles auswählen
Global ThreadActiv.l
Procedure MyThread(ID)
For i = 0 To 10 ;
Delay(1000)
Next i
EndProcedure
If ThreadActiv = #False
hThread = CreateThread(@MyThread(), 0)
If hThread
ThreadActiv = #True
EndIf
EndIf
Repeat
If IsThread(hThread)
Debug "Thread läuft"
Else
Debug "Thread fertig"
ThreadActiv = #False
EndIf
Delay(1000)
Until ThreadActiv = #False