Minimiertes Fenster wieder darstellen

Anfängerfragen zum Programmieren mit PureBasic.
ms
Beiträge: 26
Registriert: 24.08.2006 21:56

Minimiertes Fenster wieder darstellen

Beitrag 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 ?
no name, no woman, no job, no money, no worries - just tired
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag 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.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
ms
Beiträge: 26
Registriert: 24.08.2006 21:56

Beitrag 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
no name, no woman, no job, no money, no worries - just tired
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Zweite Möglichkeit:

Das Hauptprogramm besteht nur auf ner Endlosschleife mit WaitWindowEvent(). Alle weiteren Dinge werden in seperaten Threads behandelt.
Optimismus ist ein Mangel an Information.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

Ist mit Threads auf jeden Fall eleganter, aber auch gefährlicher
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Sir0Kuhl
Beiträge: 47
Registriert: 04.09.2006 01:12

Beitrag von Sir0Kuhl »

was könnte mit threads denn schief gehen?
AMD Sempron 2800+ 1,6 ghz | 768 MB RAM | Radeon X1600PRO | PureBasic 4.0 | Blitz3D
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Die Frage, was nicht schiefgehen kann, wäre wahrscheinlich schneller zu beantworten ;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten