Thread neu starten
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21202
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Thread neu starten
Hi,
ich habe einen Thread, den ich starte und mit SetInterval() immer wieder laufen lasse, bis er gestoppt wird. Jetzt kann es aber sein, dass zwischendurch etwas passiert, das der Thread nicht bis zum Intervalende warten soll/kann/darf. Wie sorgt man denn dafür, dass der Thread nicht wartet, bis die Intervallzeit abgelaufen ist, sondern schon vorher seine Arbeit verrichtet? Die Intervallzeit aber wenigstens erhalten bleibt?
ich habe einen Thread, den ich starte und mit SetInterval() immer wieder laufen lasse, bis er gestoppt wird. Jetzt kann es aber sein, dass zwischendurch etwas passiert, das der Thread nicht bis zum Intervalende warten soll/kann/darf. Wie sorgt man denn dafür, dass der Thread nicht wartet, bis die Intervallzeit abgelaufen ist, sondern schon vorher seine Arbeit verrichtet? Die Intervallzeit aber wenigstens erhalten bleibt?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Thread neu starten
da ich nicht genau weiss "was" dein Thread macht nehme ich mal ein "einfachen" Fall an.Manfred hat geschrieben:Jetzt kann es aber sein, dass zwischendurch etwas passiert, das der Thread nicht bis zum Intervalende warten soll/kann/darf.
der Thread "könnte" ja z.b. für ein RefreshAll() sorgen ... was spricht dagegen das es 2x ausgeführt wird ?
was passiert bei :setInterval(0) ?
gruss by OHR
Jimmy
Jimmy
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Thread neu starten
Manfred, schau dir mal die Klasse Signal() an. Ich denke, dies sollte genau dein Problem lösen helfen.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Manfred
- Foren-Administrator
- Beiträge: 21202
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Thread neu starten
Hi,
also, der Thread wird von Hand gestartet. Er durchsucht eine Db auf neue Einträge um daraus dann eine Datei zu erzeugen, mit deren Sendung an Openstreetmap eine Karte zurückkommt. Jetzt kann es aber passieren, dass die Konfiguration der Karte geändert wird. Das würde dann aber dazu führen, dass diese Konfigurationsänderung erst beim nächsten Interval des Threads angezeigt wird. Also möchte ich haben, dass dies sofort geschieht, wenn die Konfiguration geändert wird, diese auch direkt an Openstreetmap geschickt wird um die Änderung anzuzeigen. Wenn nämlich keine Änderung der Daten ansteht, wird auch keine neue Karte angefordert.
Im Moment löse ich es so, dass ich den Thread per Hand stoppe und dann direkt wieder per Hand starte. (per Hand heißt, per Button vom Anwender) Da wäre es natürlich schön, wenn es direkt automatisch klappen würde. Aber hier weiß ich jetzt nicht, wie man einem Thread sagen muß/darf, das er nicht bis zum Ablauf des Intervalls wartet, sondern seinen Job zwischendurch nochmals ausführt.
also, der Thread wird von Hand gestartet. Er durchsucht eine Db auf neue Einträge um daraus dann eine Datei zu erzeugen, mit deren Sendung an Openstreetmap eine Karte zurückkommt. Jetzt kann es aber passieren, dass die Konfiguration der Karte geändert wird. Das würde dann aber dazu führen, dass diese Konfigurationsänderung erst beim nächsten Interval des Threads angezeigt wird. Also möchte ich haben, dass dies sofort geschieht, wenn die Konfiguration geändert wird, diese auch direkt an Openstreetmap geschickt wird um die Änderung anzuzeigen. Wenn nämlich keine Änderung der Daten ansteht, wird auch keine neue Karte angefordert.
Im Moment löse ich es so, dass ich den Thread per Hand stoppe und dann direkt wieder per Hand starte. (per Hand heißt, per Button vom Anwender) Da wäre es natürlich schön, wenn es direkt automatisch klappen würde. Aber hier weiß ich jetzt nicht, wie man einem Thread sagen muß/darf, das er nicht bis zum Ablauf des Intervalls wartet, sondern seinen Job zwischendurch nochmals ausführt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Thread neu starten
Moin Manfred,
nichts (und niemand) hindert Dich daran, einen Thread einfach so zu starten.
Solltest nur vorher abklären, wie lange es dauert, bis er regulär neu gestartet würde - sind es nur wenige Sekunden, würde ich ihn nicht ausser der Reihe starten.
Viele Grüße,
Martin
nichts (und niemand) hindert Dich daran, einen Thread einfach so zu starten.
Solltest nur vorher abklären, wie lange es dauert, bis er regulär neu gestartet würde - sind es nur wenige Sekunden, würde ich ihn nicht ausser der Reihe starten.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21202
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Thread neu starten
Was heißt das? Ich kann mittendrin dem Thread :start() sagen, aber ohne Intervalangabe und das Teil wird einfach nochmals parallel aufgerufen, oder wie darf ich das verstehen?
Schön wäre es ja, wenn der aktuelle Thread nochmals angeworfen wird und das Zeitintervall dann neu von vorne abläuft.
Schön wäre es ja, wenn der aktuelle Thread nochmals angeworfen wird und das Zeitintervall dann neu von vorne abläuft.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Thread neu starten
Nun,
in letzterem Fall musst Du einfach das Intervall auf Null setzen (und damit den Thread terminieren) und danach neu starten.
Viele Grüße,
Martin
in letzterem Fall musst Du einfach das Intervall auf Null setzen (und damit den Thread terminieren) und danach neu starten.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21202
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Thread neu starten
Hm,
daran hatte ich schon gedacht, aber das machte mir einen zu primitiven Eindruck und ich erhoffte mir hier eine elegantere Lösung zu erhalten. Aber wenn das die Regel ist, es so zu machen!?
daran hatte ich schon gedacht, aber das machte mir einen zu primitiven Eindruck und ich erhoffte mir hier eine elegantere Lösung zu erhalten. Aber wenn das die Regel ist, es so zu machen!?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Re: Thread neu starten
Hallo Manfred,
wenn du dir beim letzten mal jeweils die Dateiinformationen merkst, ( filesize, time, date ) und dies in ein textfeld oder eine einfache dbf reinschreibst, kannst du doch immer vom programm her nachschauen mit einem kürzeren intervall, bzw. einen 2.timer setzen, der vergleicht, ob sich seit dem letzten mal was geändert hat.
Servus Paul
wenn du dir beim letzten mal jeweils die Dateiinformationen merkst, ( filesize, time, date ) und dies in ein textfeld oder eine einfache dbf reinschreibst, kannst du doch immer vom programm her nachschauen mit einem kürzeren intervall, bzw. einen 2.timer setzen, der vergleicht, ob sich seit dem letzten mal was geändert hat.
Servus Paul
- Manfred
- Foren-Administrator
- Beiträge: 21202
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Re: Thread neu starten
Hi Paul,
manchmal ist es gut sein Programm zu kennen.
Der User hat ja die Möglichkeit das Refreshintervall zu ändern. Wenn sich nichts getan hat, dann kann es stehen wie es will, es tut sich nichts und wenn es "extrem" kurz steht, dann erwischt es ja alle Änderungen zeitnah.
Das werde ich mal ausprobieren. Danke für den kleinen Denkanstoss für den Anfang.
manchmal ist es gut sein Programm zu kennen.
Der User hat ja die Möglichkeit das Refreshintervall zu ändern. Wenn sich nichts getan hat, dann kann es stehen wie es will, es tut sich nichts und wenn es "extrem" kurz steht, dann erwischt es ja alle Änderungen zeitnah.
Das werde ich mal ausprobieren. Danke für den kleinen Denkanstoss für den Anfang.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Thread neu starten
hi,
rausbekommen.
mir fällt noch dies ein:das "müsste", nach dem EVAL(), dann den Thread "unabhängig" von :setInterval(nTime) starten.
das kann man durchSolltest nur vorher abklären, wie lange es dauert, bis er regulär neu gestartet würde
Code: Alles auswählen
oThread:deltaTime
mir fällt noch dies ein:
Code: Alles auswählen
oThread:Start()
oThread:setInterval(nTime)
...
// hier die Aktion
Do_My_Block(oThread,bBlock)
PROCEDURE Do_My_Block(oThread,bBlock)
Eval(bBlock)
oThread:startTime(SECONDOS()+1)
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Thread neu starten
Hi,
je nach Aktion mußt du aber verhindern, dass der Thread gleichzeitig mehrfach läuft.
Ich bin mir nach der Beschreibung nicht sicher, ob ein Thread der länger als das interval läuft
sofort (also während der aktuellen Laufzeit = doppelt) startet, oder unmittelbar danach.
Wenn du aber - wie oben beschrieben - das Interval löschst und dann erneut startest, sollte das Problem nicht auftreten.
je nach Aktion mußt du aber verhindern, dass der Thread gleichzeitig mehrfach läuft.
Ich bin mir nach der Beschreibung nicht sicher, ob ein Thread der länger als das interval läuft
sofort (also während der aktuellen Laufzeit = doppelt) startet, oder unmittelbar danach.
Wenn du aber - wie oben beschrieben - das Interval löschst und dann erneut startest, sollte das Problem nicht auftreten.
Gruß
Hubert
Hubert