Procedure Regelmäßig ausfühen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Procedure Regelmäßig ausfühen

Beitrag von ts-soft »

Ist eigentlich einfach zu verstehen, das warum Threads für Anfänger nicht empfohlen werden. Anfänger nutzen
Try & Error zur Fehlerfindung, was ja auch nicht verkehrt ist. Bei Threads muß ich aber wissen, wie diese richtig
abgesichert werden, weil Testen kann ich tausend mal ohne das ein Fehler auftritt. Wenn ich die Theorie dazu nicht
verstanden habe und nicht umsetzen kann, wird das nichts mit Threads. Fehler lassen sich in Threads nicht einfach
so Testen, nach dem Motto läuft, dann läufts auch immer.
Ohne Threads gibt es wesentlich seltener unvorhersehbare Situationen, die nicht immer auftreten. Da fällt mir nur
die Division by Zero ein, die evtl. beim Testen nicht zum tragen kommt, weil nicht mit 0 getestet wird.

Threads sind kein absolutes MUSS und Anfänger können getrost drauf verzichten.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Procedure Regelmäßig ausfühen

Beitrag von stab »

Hallo,

ich bin hier auf dieses Thema gestoßen, als ich nach "AddWindowTimer" gesucht habe.

Die Diskussion verstehe ich nicht ganz.
Ich bin Gelegenheitsprogrammierer, zwar schon lange, aber würde mich vom Niveau her noch als Anfänger bezeichnen.
Nach Jahren überarbeite ich jetzt ein Projekt und stelle einige zeitintensive Prozeduren auf Threads um.
Macht auch richtig Spaß zu sehen, wie die jetzt im Hintergrund laufen. Ich denke, das PureBasic Beispiel, den Thread example file Thread.pb, kann man auch als Anfänger verstehen.

Schwierig wurde es für mich, meine vorhanden Prozeduren, die ich mit etlichen Parametern aufgerufen habe, als Thread laufen zu lassen. Um die Parameter zu übergeben, musste ich dann mit Zeigern auf Strukturen arbeiten. Fragen dazu würde ich aber immer wieder im Anfängerbereich stellen, in der Hoffnung, von den Profis ein kurzes Beispiel für Dummies zu erhalten und nicht gleich seitenweise Code, so gut das auch gemeint ist.

Zurück aber zu meinen Fragen:

1. Bei BindEvent(#PB_Event_Timer, @hallo()) kann ich scheinbar keine Parameter übergeben. Stimmt das?

2. Wenn ich folgende Anwendung habe:

Code: Alles auswählen

Procedure hallo()
  Debug "Hallo"
EndProcedure

OpenWindow(0,0,0,20,20,"Hallo")
AddWindowTimer(0,0,1)
BindEvent(#PB_Event_Timer, @hallo())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
muss ich beim Start erst den Timeout abwarten, bis das erste "Hallo" erscheint.
Spricht etwas gegen das einfache überschreiben des vorhandenen Timers wie etwa so?

Code: Alles auswählen

Procedure hallo()
  Debug "Hallo"
  AddWindowTimer(0,0,5000)
EndProcedure

OpenWindow(0,0,0,20,20,"Hallo")
AddWindowTimer(0,0,1)
BindEvent(#PB_Event_Timer, @hallo())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Gruß stab
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Procedure Regelmäßig ausfühen

Beitrag von Kiffi »

stab hat geschrieben:2. Wenn ich folgende Anwendung habe:

Code: Alles auswählen

Procedure hallo()
  Debug "Hallo"
EndProcedure

OpenWindow(0,0,0,20,20,"Hallo")
AddWindowTimer(0,0,1)
BindEvent(#PB_Event_Timer, @hallo())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
muss ich beim Start erst den Timeout abwarten, bis das erste "Hallo" erscheint.
wie wäre es hiermit?

Code: Alles auswählen

[...]
BindEvent(#PB_Event_Timer, @hallo())
hallo() ; <-- einmaliger 'manueller' Aufruf
[...]
a²+b²=mc²
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Procedure Regelmäßig ausfühen

Beitrag von stab »

Ja, ich könnte aber auch das ganze etwas flexibler gestalten wollen

Code: Alles auswählen

Global t = 5000
Global w

Procedure hallo()
  Debug "Hallo"
  AddWindowTimer(0,0,t)
  w +1
  If w = 2: t = 1000: EndIf
  
EndProcedure

OpenWindow(0,0,0,20,20,"Hallo")
AddWindowTimer(0,0,1)
BindEvent(#PB_Event_Timer, @hallo())

Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Ich frage nur, weil das nicht dokumentiert ist und ich nicht will, dass sich nach Stunden mein Programm aufhängt.
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten