Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Thread startet nur 1x von selbst nach [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred » Do, 12. Apr 2012 15:11

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13531
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Thread startet nur 1x von selbst nach

Beitrag von Martin Altmann » Do, 12. Apr 2012 15:17

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 13531
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Kontaktdaten:

Re: Thread startet nur 1x von selbst nach

Beitrag von Martin Altmann » Do, 12. Apr 2012 15:20

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: http://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: http://meldungen.altem.de/

Mitglied der XUG Osnabrück
stellv. Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 15:31

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 18:07

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 196
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig

Re: Thread startet nur 1x von selbst nach

Beitrag von Sören » Do, 12. Apr 2012 18:10

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: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 18:34

Habe ich als erstes probiert, bringt auch nichts.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Thread startet nur 1x von selbst nach

Beitrag von AUGE_OHR » Do, 12. Apr 2012 19:17

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: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 19:22

OK,

hatte ich auch schon. Klappt aber trotzdem nicht.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10522
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Thread startet nur 1x von selbst nach

Beitrag von AUGE_OHR » Do, 12. Apr 2012 19:27

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: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 19:32

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitrag von Manfred » Do, 12. Apr 2012 19:43

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh » Do, 09. Aug 2012 7:32

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: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred » Do, 09. Aug 2012 7:37

Bitte etwas genauer Hubert, ich kann Dir so früh nicht folgen. :oops:
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh » Do, 09. Aug 2012 8:01

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: 16897
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von Manfred » Do, 09. Aug 2012 8:07

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 Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 13753
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitrag von brandelh » Do, 09. Aug 2012 8:28

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