Thread startet nur 1x von selbst nach [ERLEDIGT]

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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred »

Hi,

ich habe einen thread, den ich starte und nachdem er seine Pflicht erfüllt hat setze ich mit :setinterval(zeit) eine neue Startzeit. Das Ding ärgert mich nun, weil es nur 1x nach dem ersten Start von selbst wieder anläuft, danach nicht wieder. Wenn ich im Debugger nachsehe, ist aber zu sehen, dass das Interval gesetzt wurde. Irgendwelche Ideen, ohne den Quellcode gesehen zu haben?
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 startet nur 1x von selbst nach

Beitrag von Martin Altmann »

Yup.
Reicht Dir als Antwort: Das geht so nicht! 8)
Schau mal in der Hilfe - da ist das explizit erwähnt.

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
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 startet nur 1x von selbst nach

Beitrag von Martin Altmann »

Alaska Hilfe zu :setStartTime() hat geschrieben:Wenn :setStartTime() und :setInterval() benutzt werden, sollte :setInterval() in :atStart() aufgerufen werden.
: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 startet nur 1x von selbst nach

Beitrag von Manfred »

Ich benutze keine :setstarttime(). Ich rufe das Dingen auf und danach setze ich das Interval neu. Dann läuft es noch 1x von selbst und dann nicht mehr.
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
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 startet nur 1x von selbst nach

Beitrag von Manfred »

Vielleicht sieht ja jemand meinen Fehler?

grob skizziert

Code: Alles auswählen

LOCAL oThreadWacheMail := wache_mail():new()

oThreadWacheMail:start("wacheMail",oThreadWacheMail)

procedure wache_mail(oThread)

// hier steht der Code, der ausgeführt wird.
oThread:setInterval(oParameterExport:intmail*60*100)                   // neuen Wert setzen, falls die Parameter zwischendurch geändert wurden
return
kann das so überhaupt klappen?
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!!
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Thread startet nur 1x von selbst nach

Beitrag von Sören »

Hallo Manfred,

probier mal das aus:

Code: Alles auswählen

oThread:setInterval( NIL )
oThread:setInterval( nNewInterval )
Beste Grüße,
Sören
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 startet nur 1x von selbst nach

Beitrag von Manfred »

Habe ich als erstes probiert, bringt auch nichts.
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 startet nur 1x von selbst nach

Beitrag von AUGE_OHR »

Manfred hat geschrieben:

Code: Alles auswählen

LOCAL oThreadWacheMail := wache_mail():new()
oThreadWacheMail:start("wacheMail",oThreadWacheMail)

procedure wache_mail(oThread)
// hier steht der Code, der ausgeführt wird.
oThread:setInterval(oParameterExport:intmail*60*100)                   // neuen Wert setzen, falls die Parameter zwischendurch geändert wurden
return
kann das so überhaupt klappen?
ich würde sagen : NEIN
IMHO muss ein o:setInterval() VOR der o:Start() gesetzt werden. siehe C:\ALASKA\XPPW32\Source\COMPAT\timer.prg
gruss by OHR
Jimmy
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 startet nur 1x von selbst nach

Beitrag von Manfred »

OK,

hatte ich auch schon. Klappt aber trotzdem nicht.
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 startet nur 1x von selbst nach

Beitrag von AUGE_OHR »

Manfred hat geschrieben:hatte ich auch schon. Klappt aber trotzdem nicht.
hast du den "alten" Thread versucht zu benutzten oder ihn "neu" angelegt ?
gruss by OHR
Jimmy
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 startet nur 1x von selbst nach

Beitrag von Manfred »

Hm,

ich denke mal, dass ich den immer wieder benutzen möchte. Also er wird einmal mit Start angeworfen. Dann durchläuft er seine Arbeit und direkt danach wird setinterval() neu gesetzt, oder nochmal, je nachdem ob sich der Wert für die zeit geändert hat oder nicht. In der Hoffnung, dass er dann nach dem (neuen) Intervall wieder startet. das macht er aber nicht andauernd, sondern immer nur 1x beim Start direkt. Arbeitet seine Funktion ab, bekommt wieder setinterval() gesetzt und soll dann warten, um dann wieder loszulaufen.
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
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 startet nur 1x von selbst nach

Beitrag von Manfred »

Boh ey,

wie komm ich mir denn vor? Wo steht geschrieben, dass man setinterval() nur setzen darf, wenn man das Intervall auch wirklich ändern will? Ich habe da nichts zu gelesen. Ist vielleicht jemand hier, der bessere Augen hat? Also, es klappt. Aber nur wenn man Setinterval() setzt, wenn sich der Wert geändert hat.
Man setzt also vor dem Start einmal das Interval und dann nur noch, wenn es sich ändern soll. Also eine Art Bestätigung darf nicht sein.
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
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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh »

Wenn du immer bestätigst, dass der nächste Start in einigen ms eintreten soll, verschiebst du diesen doch oder ;-)
Gruß
Hubert
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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred »

Bitte etwas genauer Hubert, ich kann Dir so früh nicht folgen. :oops:
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
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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh »

Na bei jedem :setInterval( nWert ) wird doch der nächste Start auf nWert/100 Sekunden verschoben.
Wenn du nun vor 20/100 Sekunden die 100 gesetzt hast, müsste in 80/100 Sekunden der nächste Start sein.
Du "bestätigst" nun aber mit einem :setInterval( nWert ), wenn nWert auch heruntergezählt wird, könnte das noch funktionieren,
ich denke aber dass dies nicht der Fall ist und dann verschiebst du den nächsten Start wieder auf nWert/100 Sekunden.

Das ist wie mit den Aufträgen an Kinder oder Ehemänner ... "mach ich gleich ..." kommt auch nie was dabei raus :D
Gruß
Hubert
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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred »

Wieso?

Ich starte den Thread, er arbeitet sein Ding ab und ich setze danach das Interval neu.

Wenn ich Dich richtig verstanden habe, denkst Du ich erhöhe mit jedem Setzen das Intervall? Oder verschiebe es? Verstehe ich nicht. Die Aufgabe wird erfüllt und dann sage ich ihm, wann die nächsten Kohlen aus dem Keller holen soll. Und nicht bevor die letzten Kohlen geholt wurden.
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
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 startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh »

ich verstehe was du meinst und hatte dein Beispiel nicht richtig gelesen.
Mein Beispiel zeigt, dass er nach dem 2. "Verlängern" den code nicht mehr ausführt, aber atEnd() auch nicht ausführt.
Irgendwie hängt er im Wartezustand ...

Code: Alles auswählen


PROCEDURE Main
   LOCAL oThread := NIL
   LOCAL nInterval := 100 // jede Sekunde ein Durchgang
   LOCAL cName, cVorname
   CLS
   @ 1,1 say "Threadtestprogramm wartet auf Eingaben"
   cName := cVorname := space(50)
   oThread := Thread():new()
   oThread:setInterval(nInterval)
   oThread:atStart := {|| DispOutAt( 7, 30, "Thread: "+ntrim(ThreadID())+" => Time(): "+time()+" ist gestartet" ) }
   oThread:atEnd   := {|| DispOutAt( 8, 30, "Thread: "+ntrim(ThreadID())+" => Time(): "+time()+" endet" ) }
   oThread:start( "Anzeige" )

   @ 2,1 say "MAIN ThreadID()="+str(ThreadID())
   @ 10,10 SAY "Nachname"  GET cName
   @ 12,10 SAY " Vorname"  GET cVorName
   READ

   oThread:setInterval( NIL)  // wenn dieses fehlt, wird (zumindest bei mir) NICHT in :atEnd aufgeräumt.

   @ 22,10 SAY " Ende in 10 Sekunde oder nach Tastendruck "

   inkey(10)

   RETURN

   PROCEDURE Anzeige
      local oT := ThreadObject(), nCount := oT:startCount
      DispOutAt( 2, 30, "Thread: "+ntrim(ThreadID())+" => Time(): "+time()+" Lauf: "+ntrim(nCount,5)+"         " )
      do case
         case nCount <= 5
              // OK
         case nCount > 5 .and. nCount < 15
              DispOutAt( 4, 50, "Jetzt 200 ..."+time() )
              oT:setInterval(200)
         otherwise
              DispOutAt( 4, 50, "Jetzt NIL    "+time() )
              oT:setInterval(NIL)
      end
   RETURN
   function ntrim(n);return alltrim(str(n))
Gruß
Hubert
Antworten