Thread startet nur 1x von selbst nach [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Thread startet nur 1x von selbst nach [ERLEDIGT]

Beitragvon Manfred » Do, 12. Apr 2012 14: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon Martin Altmann » Do, 12. Apr 2012 14: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: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Thread startet nur 1x von selbst nach

Beitragvon Martin Altmann » Do, 12. Apr 2012 14: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
Martin Altmann
Foren-Administrator
Foren-Administrator
 
Beiträge: 12738
Registriert: Fr, 23. Sep 2005 3:58
Wohnort: Berlin

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 14: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-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 17: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.
Benutzeravatar
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon Sören » Do, 12. Apr 2012 17:10

Hallo Manfred,

probier mal das aus:

Code: Alles auswählen
oThread:setInterval( NIL )
oThread:setInterval( nNewInterval )
Beste Grüße,
Sören
Sören
Rekursionen-Architekt
Rekursionen-Architekt
 
Beiträge: 196
Registriert: Mo, 07. Aug 2006 9:18
Wohnort: Leipzig

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 17: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon AUGE_OHR » Do, 12. Apr 2012 18: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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 18: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon AUGE_OHR » Do, 12. Apr 2012 18: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
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10146
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 18: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-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread startet nur 1x von selbst nach

Beitragvon Manfred » Do, 12. Apr 2012 18: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitragvon brandelh » Do, 09. Aug 2012 6:32

Wenn du immer bestätigst, dass der nächste Start in einigen ms eintreten soll, verschiebst du diesen doch oder ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

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

Beitragvon Manfred » Do, 09. Aug 2012 6: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitragvon brandelh » Do, 09. Aug 2012 7: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
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

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

Beitragvon Manfred » Do, 09. Aug 2012 7: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
Manfred
Foren-Moderator
Foren-Moderator
 
Beiträge: 15970
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

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

Beitragvon brandelh » Do, 09. Aug 2012 7: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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13267
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim


Zurück zu OOP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast