Procedure in bestimmten Zeitintervallen ausführen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

OK, wenns dann zusätzlich keine Probleme mit Threads gäbe, müsste sich das doch so machen lassen, wie ichs mir gedacht habe.
PostMessage erzeugt doch ein Event, dass man in der Hauptschleife abfragen kann, oder? Ein Callback mag ich nicht benutzen.

Dann könnte man auch WaitWindowEvent() nehmen, oder?
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Team100
Beiträge: 104
Registriert: 13.09.2004 22:59

Beitrag von Team100 »

@bluejoke

Sollte gehen. Aber bei Threads sollte man immer alles austesten .... :mrgreen:
Kompliziert kann es jeder lösen, aber das wirklich Geniale ist einfach.....
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

hardfalcon hat geschrieben:Und weshalb nimmst du nicht meinen Vorschlag (oder gehst zumindest darauf ein)? *beleidigt*
Sorry Hardfalcon, habe mir das natürlich auch angesehen. Mittels Threat wäre da was machbar, aber dann lese ich oft die
Probleme mit den Threats, deshalb möchte ich das so nicht realisieren.

Nochmal zu den Timer Funktionen aus den PureTools.
Eigentlich funktioniert das ja, aber Windows läuft nach danach seeehr langsam.
Kann es damit zusammenhängen, dass das Abfragen von einem POP3 Server einfach zu lange dauert?
Die Routine also zu lange im Timer verbringt?
Oder liegt es vielleicht an einer Kollision mit der ´bpePOP3´Libary? Die benutze ich nämlich.

Nun habe ich mir heute folgendes gedacht:

Settimer ruft eine Procedure auf, welche wiederum ein Event an das Hauptprogramm sendet.
Somit dürfte bei "EventID.l = WaitWindowEvent()" etwas ankommen und die Schleife wird ausgeführt.

Also etwa so:

Code: Alles auswählen

... 
... 
Procedure ZeitVorbei() 
Auf_Mail_pruefen=#True
-->Schicke nun irgendwie ein Event ans Hauptprogramm--<
EndProcedure 

StartTimer( 0, 30000, @ZeitVorbei() ) 

Repeat 

 EventID = WaitWindowEvent() 

If Auf_Mail_pruefen=#True
Endtimer(0)
Auf_Mail_pruefen=#False
CheckMail()
StartTimer( 0, 30000, @ZeitVorbei() )
Endif

 If dies oder das 
  dann mache dies oder das oder anderes 
 endif 
... 
... 
until Quit=1
Meint ihr das könnte funktionieren? Wie schicke ich ein Event aus der Procedure heraus?

Gruß
Thomas
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Aber SetTimer kann doch auch eine #WM_TIMER-Nachricht erzeugen, warum willst du das den so umständlich machen?
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ehrlich gesagt versteheich eure Abneigung gegenüber Timern nicht ganz...
Ich hatte mal einen "Virus" (Hoax) geproggt, der mittels 2 bzw. 3 Threads (je nach ausführung) die Nerven des Benutzers "bearbeitete": :mrgreen:
- CD-ROMs zufallsgeneriert ständig öffnen und schliessen
- An die aktuelle Position des Mauszeigers ständig "VIRUS" (mit ständig wechselnder Farbe) schreiben. (Da ich es einfach auf den Desktop male mittels Danilos "DesktopOutput()", ergibt sich eine farbige "mMauszeigerspur")
- Über den internen PC-Speaker ständig kurze Piepsermit wechselnder Frequenz und Länge ausgeben, sodass sich ein undefierbares "Geblibbel" ergibt

Und ich hatte JEDES der drei genannten "Features" jeweils in einem eigenen Thread ohne Probleme laufen. Und dabei liefen die threads allesamt gleichzeitig. Ich habe allerdings nur die Drawinglib, nicht die Sprite-Lib(s) genutzt, da DirectX AFAIK nicht INNERHALB (aber vielleicht "NEBEN"?) Threads funktioniert.


Ansonsten: Macht doch eine Lib/Procedure, die das aktuelle Datum samt Uhrzeit feststellt, und das in Millisekunden umrechnet! Sollte doch funktionieren, oder? (Zugegeben, die Millisekunden dürften schieriger zu realisieren sein...)

cya
Pascal
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hardfalcon hat geschrieben:...da DirectX AFAIK nicht INNERHALB (aber vielleicht "NEBEN"?) Threads funktioniert.
och nö... echt jetzt???
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Ich werde das Gefühl nicht los, dass du das jetzt (zumindest ein wenig) sarkastisch gemeint hast... :mrgreen: :lol:

cya
Pascal
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:oops: nö, hatte ich eigentlich nicht...

...ich hab noch nicht ausprobiert, DX-geschichten in threads zu packen...

..irgentwie leuchtet mir nicht ein, warum das nicht gehen soll...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Es braucht dir ja auch nicht einzuleuchten, es reicht ja, wenns in der Hilfe steht. :mrgreen: :lol:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PB-Help hat geschrieben:Hinweis: Benutzen Sie innerhalb von Threads kein DirectX (MS Windows Einschränkung)! Wenn Sie auf Grafikdarstellung in Threads angewiesen sind, verwenden Sie stattdessen Images und 2DDrawing.
...ist ja mal wieder mega-ausführlich...
Bild... oder war's doch sarkasmus?

sollte ich wohl ne testreihe fahren...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten