Thread neu starten

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Thread neu starten

Beitrag von Manfred »

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?
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread neu starten

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Jetzt kann es aber sein, dass zwischendurch etwas passiert, das der Thread nicht bis zum Intervalende warten soll/kann/darf.
da ich nicht genau weiss "was" dein Thread macht nehme ich mal ein "einfachen" Fall an.

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
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
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

Beitrag von Herbert »

Manfred, schau dir mal die Klasse Signal() an. Ich denke, dies sollte genau dein Problem lösen helfen.
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread neu starten

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Thread neu starten

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread neu starten

Beitrag von Manfred »

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.
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Thread neu starten

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread neu starten

Beitrag von Manfred »

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!?
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!!
Paul
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Mi, 21. Mär 2007 15:22
Wohnort: 1230 Wien

Re: Thread neu starten

Beitrag von Paul »

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
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread neu starten

Beitrag von Manfred »

Hi Paul,

manchmal ist es gut sein Programm zu kennen. :roll:

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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread neu starten

Beitrag von AUGE_OHR »

hi,
Solltest nur vorher abklären, wie lange es dauert, bis er regulär neu gestartet würde
das kann man durch

Code: Alles auswählen

oThread:deltaTime
rausbekommen.

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)
das "müsste", nach dem EVAL(), dann den Thread "unabhängig" von :setInterval(nTime) starten.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread neu starten

Beitrag von brandelh »

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.
Gruß
Hubert
Antworten