Fenster unabhängig vom eigenen Prozess machen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Fenster unabhängig vom eigenen Prozess machen

Beitrag von Xaby »

Hallo Fans

folgendes:

Mein Programm hat nur einen Knopf, der was wirklich tut.
Er heißt ,,MACHEN !!!,,

Wenn man den klickt, tut das Programm, was ihm aufgetragen wurde.
Es liest eine große Anzahl an Dateien von der Festplatte ein.

Nun mein Problem, ich kann mein Fenster wärend das Programm die Daten auf der Platte durchsucht nicht mehr verschieben oder kleiner machen.

Das ist etwas ungünstig.

Ich denke, es hängt damit zusammen, dass mein Programm aus dem Main-Loop in eine andere Prozedure gegangen ist und erst wieder in den Main-Loop zurück kehrt, bis die Suche vorbei ist.

Müsste ich meine Dateisuche in einem eigenen Thread starten?
Oder einfach zwischen den Schleifen mal ein WindowEvent()
abfragen?

Ha jemand konstruktive Vorschläge?

Sagen wir so:

Code: Alles auswählen

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration

Procedure Mache()
   Repeat
      Debug "tue"
   Until 0=1
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 379, 170, 146, 67, "Dings",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 10, 10, 120, 40, "Mache") 
    EndIf
  EndIf
EndProcedure

;/ Haupt

Open_Window_0()
Repeat
   Event = WaitWindowEvent()

   If Event=#PB_Event_Gadget
     If EventGadget()=#Button_0
        Mache()
     EndIf
   EndIf

Until Event=#PB_Event_CloseWindow

Anfangs wird es auch nicht selbst wieder gezeichnet. Aber nach einer Weile geht es wieder. Aber nicht, wenn Windows nicht gleich merkt, was los ist und die Schleife ein bisschen mehr macht.

:roll:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Die Lösung heißt Threads! Diese laufen unabhängig vom eigenen Hauptprogramm und sind damit ideal for alle Arten von Hintergrund Prozessen.

Check mal die PB Hilfe über Threads. Ich glaube dazu muß ich nicht viel sagen da das erstellen von Threads recht simpel ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Okay, überzeugt :mrgreen:

Also dann:

Global Paul.b
;- Window Constants

;
Enumeration
#Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
#Button_0
EndEnumeration

Procedure Mache()

Paul=0

Repeat
Debug "tue"

delay(10)
Until 0=1or Paul
EndProcedure

Procedure Open_Window_0()
If OpenWindow(#Window_0, 379, 170, 146, 67, "Dings", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 10, 10, 120, 40, "Mache"
,#PB_Button_Toggle)
EndIf
EndIf
EndProcedure

;/ Haupt

Open_Window_0()
Repeat
Event = WaitWindowEvent()

If Event=#PB_Event_Gadget
If EventGadget()=#Button_0
If IsThread( Thread)
Paul=1
Else

Thread= CreateThread(
@Mache() ,0)
EndIf
EndIf
EndIf

Until Event=#PB_Event_CloseWindow
Zuletzt geändert von Xaby am 06.12.2006 11:21, insgesamt 17-mal geändert.
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Das sollte dann aber CreateThread(@Mache() ,0) heissen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

außerdem sollte man code in code-tags setzen, und net grün.
mensch, Folker, das is doch nich dein erster tag im forum,
das müsstest du doch langsam wissen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

@ Kaeru
Siehst doch oben, dass ich es kann :mrgreen:

Ja, fehlt ein @.


Dann sag mal, wie ich, wenn ich [ code ] ... [ / code ] benutze, diese Zeile hervorheben kann.

Code: Alles auswählen

Hallo
[b]Gutenmorgen[/b]
Tach
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Ja, fehlt ein @.
[...]
CreateThread(Mache()@ ,0)
Betrunken ? :lol:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Dann sag mal, wie ich, wenn ich [ code ] ... [ / code ] benutze, diese Zeile hervorheben kann.

garnicht!
aber einrückungen und lesbarkeit sind imho weit wichtiger als farbliche hervorhebungen.

du Spielratz ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Ihr seid ja schon früh auf

Beitrag von Xaby »

Was sagt ihr?

Jetzt wäre es ein Beispiel für das CODEARCHIVE :? :o :shock: :D

:allright:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

kann ich nicht beurteilen. ich seh dar nur nen gummibärchen-text, keinen code. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten