vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
VB6 Timer mit längerem Interval? 
Autor: Muflet
Datum: 27.12.06 14:57


Hallo kurz um ich hab ein kleines programm da drin sind 4 timer
ich kann die timer intervalls nicht höher als 65000 setzen
wie mache ich es GESCHEIT damit ich das intervall erhöhen kann?
Sleep kann sich wohl jeder denken wieso ich es nicht verwenden will, da friert das ganze programm, ich habe es schon mit createwaitabletimer versucht. mit 1 oder 2 timern klappt es sehr gut aber keine ahnung warum es mit 4 nicht geht

Private Sub Form_Load()
Timer1.Interval = 10000
End Sub

Private Sub Timer1_Timer()
'zählt label1 alle 10 sekunden hoch
Label1.Caption = Val(Label1.Caption) + 1
End Sub

-----
was ich jetzt versucht habe sieht so aus

----

Private Sub Form_Load()
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Wait 1*Timer1.Interval
Label1.Caption = Val(Label1.Caption) + 1
End Sub


---
Wait ist eine Funktion die ich bei M$ für CreateWaitableTimer gefunden habe. Funktioniert normalerweise ganz gut, friert auch das GUI nicht ein, mache ich es jetzt aber mit meinen 4 timern, läuft z.b. timer1 dann auch auf der sekunden zahl die ich timer4 gegeben hab, sprich alle timer orientieren sich am langsamsten.

also wie bekomme ich ein timer hin den ich z.b. nur alle 5 minuten etwas tun lassen kann?

welche guten ideen habt ihr?

nochmal zur klärung

------
Private Sub Command1_Click()
If Timer1.Enabled = False Then

Timer1.Interval = 2
Timer2.Interval = 1
Timer3.Interval = 1

Timer1.Enabled = True
Timer2.Enabled = True
Timer3.Enabled = True

Else

Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False

End If


----
funktioniert nicht genau gleich wie

------

Private Sub Command1_Click()
If Timer1.Enabled = False Then


'Timer1.Interval = 2000
'Timer2.Interval = 1000
'Timer3.Interval = 1000


Timer1.Enabled = True
Timer2.Enabled = True
Timer3.Enabled = True

Else
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False

End If

--

tipps??
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB6 Timer mit längerem Interval? 
Autor: Zardoz
Datum: 27.12.06 16:49

Hallo Muflet,
mit Timern solltest du sparsam umgehen. Bei kurzen Intervallen behindern sie
sich gegenseitig. Für längere Intervalle einen Zähler ins Timer-Event und nur
jeden n-ten Aufruf was ausführen. Alternative wäre das:
http://www.activevb.de/tipps/vb6tipps/tipp0358.html

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB6 Timer mit längerem Interval? 
Autor: Muflet
Datum: 28.12.06 13:10

hey erkläre mir das mal genauer, wie sich die timer gegenseitig behindern. konnte ich bislang noch nicht nachvollziehen also ich hab mal so 10 timer gemacht und jeder hat dann auch das so getan wie er sollte.

also meinst du in etwa so?


Private Sub Timer1_Timer()

x=x+1

if x=1000 then


Label1.Caption = Val(Label1.Caption) + 1
x = 0

End if

End Sub

das heisst er springt mir 1000x in den timer1_timer rein tut aber nur beim 1000. mal das ausführen was er soll? ist das gut so? oder hat jemand noch eine bessere idee? auf die idee bin ich auch schon gekommen aber ich dachte ich krieg das mit waitable timers irgendwie hin.

grundsätzlich soll die timers in meinem programm völlig unabhängig sein und sich am besten gegenseitig NICHT behindern, sprich selbst wenn einer mal hängen sollte sollen die anderer weiter machen.

die API timer schaue ich mir mal in ruhe an.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB6 Timer mit längerem Interval? 
Autor: Zardoz
Datum: 28.12.06 14:13

Hi Muflet,

Zitat:


hey erkläre mir das mal genauer, wie sich die timer gegenseitig behindern. konnte ich bislang noch nicht nachvollziehen also ich hab mal so 10 timer gemacht und jeder hat dann auch das so getan wie er sollte.


Es werden Events übersprungen. Das passiert aber nur, bei mehreren Timern und
kurzen Intervallen (< 20 ms). Kann sein das das bei schnelleren PCs nicht mehr
auffällt.

Private Sub Timer1_Timer() 
 
Static X&
x=x+1 
 
if x=1000 then 
  Label1.Caption = Val(Label1.Caption) + 1 
  x = 0 
End if 
 
End Sub
Ja, meinte ich so. Wenn du den Intervall auf 60000 stellst, dann sind 1000 Aufrufe
schon über 16 Stunden.

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Unzureichend! 
Autor: Muflet
Datum: 28.12.06 14:43


Hallo,

das funktioniert unzureichend! Sie dir mein Beispiel an

http://rapidshare.com/files/9267016/TimeMe.zip.html

zur erklärung das programn soll für user sein, diese user können minimal z.b. 1 Sekunde als intervall einstellen sie könnten aber auch 300 einstellen (5 minuten)
es soll in GENAU diesen abständen etwas passieren.
ein timer mit genau einer sekunde kann ich realisieren in dem ich timer1.interval = 1000 mache
höher als 65000 komme ich aber nicht. jetzt gibts dann aber user die einen timer für 300 sekunden bräuchten, also kan ich nicht auf 300*1000 stellen.
es wäre hilfreich einen timer zu haben der
timer1.interval = 1 ' jede sekunde macht nicht millisekunde
timer1.interval = 300 ' alle 300 sekunden macht

dazu müsste der timer selbst einfach nochmal ne sekunde 'schlafen' das hab ich eben mit createwaitabletimer versucht klappt auch soweit nur nicht bei 5 oder 10 oder mehreren timern.

das mit den api timern hab ich mir mal angeschaut, hab im moment nur ne vb5 control creation edition damit meckert er mir immer ungültiger addressof benutzung.

auserdem scheint es etwas kompliziert da ich dem ganzen die adresse einer funktion mitgeben muss, diese funktion ist aber nicht einheitlich

ich hab ein timer1 array

so in etwa

Private Sub Timer1_Timer(Index)
Timer1(Index) bla bla bla
end sub

also das ganze ist dynamisch da ich vorher auch noch nicht weis wieviel timer der user braucht

daher erzeuge ich die on the fly mit load

wie gesagt funktionieren tut das ganze bisher prima die einzige einschränkung ist, dass ein user einen maximalen timer momentan auf 60 sekunden machen kann und das ist unzureichend
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Wichtig! Wieso ist das so? 
Autor: Muflet
Datum: 28.12.06 17:03



Schaut euch BITTE mal mein Code an, ja es sieht bischen wir aus da ich versucht habe zu debuggen und dem ganzen auf die Schliche zu kommen

http://rapidshare.com/files/9283022/Project1.zip.html

Ich kann jetzt den original VB Timer so verlangsamen das ich ihm z.b. timer1.interval = 1 übergebe und er wirklich daraus 1 sekunde macht anstatt 1 millisekunde
leider hat die wait funktion von MS viele bugs. der erste bug war das sie alle anderen exes ausbremsen würde. sprich hab ich eine exe die heisst test1.exe und starte sie 2x werden beide test1.exe ausgebremst. das hab ich gefixed.
das zweite problem ist das ich den schnellsten timer zu erst starten muss.
warum? wer findet den fehler im code? schaut euch die beiden Buttons an, die engine ist die selbe, es wird lediglich Timer3 VOR Timer2 gestartet

warum geht es dann und wenn ich timer1,timer2,timer3 hintereinander starte dann nicht???
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Unzureichend! 
Autor: Zardoz
Datum: 29.12.06 18:55

Hi Muflet,
sieh mal hier:
http://foren.activevb.de/cgi-bin/foren/view.pl?forum=13&msg=340&root=340&page=2

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB6 Timer mit längerem Interval? 
Autor: wa_gru
Datum: 29.12.06 19:26

Warum keinen Api Timer ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: VB6 Timer mit längerem Interval? 
Autor: Muflet
Datum: 02.01.07 10:03


hmm wie kann ich die während des programmes zur laufzeit dynamisch mehrere erzeugen am besten in einm array und jeder tut etwas anderes?

mit einem timer array klappt das bisher alles wunderbar
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel