Hej, jag stöter på problem gällande "Stack Space" (error 28) "LÖST!!!", sökte på det i forumet och hitta det som Pelle skrivit. Jag vet vart, tror jag, som det blir fel men vet inte VAD som är fel så en förklaring vad "Stack Space" är kanske skulle hjälpa. Out of stack space (Error 28) Om jag lägger koden här(inte stor) så kanske någon kan testa den och se vad jag gör för fel? Har läst det ovan och förstår lite vad problemet består i men jag kan då inte lösa det. Problemet är att det tar tid innan felet kommer. Någon kanske ser direkt vad felet är. Hej Som Sven säger blir det ett rekursivt anrop, se http://www.pellesoft.nu/login/articles/other/rekursiv.asp för en beskrivning. Man borde kunna göra såhär istället: JAg tror du redan har löst det. Men för andra som läser tråden är det nog meningen till at man inte skall lägga koden som skall köras i Wait utan anropa den från en annan sub: Tjena Sven, jag måste köra tempmodulen i mitt termometerprojekt som en service, dvs modul, därav timer i modulen. Hej igen Det spelar ingen roll om det missar lite, tempen ändrar sig iaf. Hej HejStack Space MED KOD.
Detta inträffar efter ett tag, går väl kanske en halv dag eller mer så jag har svårt att sitta och testa.
MVH / Benny
Det Fungerar nu, gjorde lite ändringar.
Vad jag nu undrar över är vad "INTERVAL" är i min kod nedan:
Jag anropar så här:
"wait(1000)"
Vad står siffran efter wait för? sätter jag "1000" för en sekund så e det samma intervall jag får med "30000" som borde vara 30 sekunder.
<code>
Public Sub Wait(ByVal Interval As Single)
Dim TimeOut As Single
TimeOut = Timer + Interval
Do While Timer < TimeOut
Sleep 1000 ' DETTA GÖR JU ATT DET STANNAR UPP I EN SEKUND!?
DoEvents
'HÄR LÄGGER JAG KODEN SOM SKALL UTFÖRAS VAR 30:de SEKUND
Loop
wait(1000) 'DETTA FÅR DET HELA ATT BLI EN TIMER.
End Sub
</code>
Någon som förstått?:-)Sv: Stack Space
Possible causes for this error are:
Too many active Function or Sub calls. Check that general recursive procedures are not nested too deeply and that they terminate properly.
Local variables require more local variable space than is available. Try declaring some variables at the module level instead. You can also declare all variables in the procedure static by preceding the Property, Sub, or Function keyword with Static. Or, you can use the Static statement to declare individual static variables within procedures.
Fixed-length strings use more stack space than variable-length strings. Try redefining some of your fixed-length strings as variable-length strings.
Too many nested DoEvents statements.
Use the Calls dialog box to view which procedures are active (on the stack). To display the Calls dialog box, select the button to the right of the Procedures box in the Debug window.
Kolla länken:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q142138Sv: Stack Space
Koden kommer ikväll.
MVH / BennySv: Stack Space
>wait(1000) 'DETTA FÅR DET HELA ATT BLI EN TIMER.
Det här ser tokigt ut , det blir sk.rekursivt anrop och då
får du Out of StackSpace efter en tid om du inte bryter förloppet.
Du får lägga denna kodrad utanför denna sub.
Varför duger inte en vanlig Timer ??
/Sven Sv: Stack Space
<code>
Public Sub Wait(ByVal Interval As Single)
Dim TimeOut As Single
While True
TimeOut = Timer + Interval
Do While Timer < TimeOut
Sleep 1000 ' DETTA GÖR JU ATT DET STANNAR UPP I EN SEKUND!?
DoEvents
'HÄR LÄGGER JAG KODEN SOM SKALL UTFÖRAS VAR 30:de SEKUND
Loop
Wend
End Sub
</code>
/JohanSv: Stack Space MED KOD.
<code>
Public Sub Wait(ByVal Interval As Single)
Dim TimeOut As Single
TimeOut = Timer + Interval
Do While Timer < TimeOut
Sleep 1000 ' DETTA GÖR JU ATT DET STANNAR UPP I EN SEKUND!?
DoEvents
Loop
End Sub
Public Sub Main()
Dim Index as Long
For Index = 1 to 10
'HÄR LÄGGER JAG KODEN SOM SKALL UTFÖRAS VAR 30:de SEKUND
Wait(3000) 'DETTA FÅR DET HELA ATT BLI EN TIMER.
Next
End Sub
</code>
Har begränsat det till 10 anrop. Vill man kan man även göra en evighetsloop:
<code>
Public Sub Main()
Dim Index as Long
Do
'HÄR LÄGGER JAG KODEN SOM SKALL UTFÖRAS VAR 30:de SEKUND
Wait(3000) 'DETTA FÅR DET HELA ATT BLI EN TIMER.
Loop
End Sub
</code>Sv: Stack Space
Andreas O Johan: Jag har testat era båda exempel och ser ingen direkt skillnad, vilken är bäst? Smak o tycke eller?
Jag har inte fått svar på vad "Wait(vad_är_detta_för_värde)"
jag menar: man skriver 1000 efter wait, varför? man skriver siffra efter sleep oxå.
om jag vill att era exempel skall utföra något var 30:e sek, vilken av dom ska ha värde 30000? Sleep eller wait?
Som jag ser nu så loopar den i 30 sek om man skriver 30000 efter wait medans den väntar i 30 sek om man skriver 30000 efter sleep?
Då känns det som att wait inte behöver ha nått efter sig?
Hur som helst: Ett STORT tack till er:)Sv: Stack Space
Undrar om du inte får lägga in en kontroll för midnattspassage
när du använder Timer.Har inte analyserat exakt vad som händer
det blir kanske bara en miss på 30 sek.
Tycker att du kan öka Sleep till 20000 eftersom detta program
inte gör något annat än att övervaka.
Förresten du kan köra sleep 60000 och skippa hela wait köret
det må väl räcka att läsa temperatur en gång i minuten.
/SvenSv: Stack Space
Det va det som va frågan, SKA jag verkligen behöva Wait?
Jag kör utan så får vi se hur det går, blir ju mindre kod antar jag:-)
Så här funkar det likadant:
<code>
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub timer()
Do
Sleep 1000 ' DETTA GÖR JU ATT DET STANNAR UPP I EN SEKUND!?
DoEvents
'HÄR LÄGGER JAG KODEN SOM SKALL UTFÖRAS VAR 30:de SEKUND
MsgBox "hej"
Loop
End Sub
Sub main()
timer
End Sub
</code>
(Kolla min nya tråd under "programvaror")Sv: Stack Space
Funderade lite så här skulle jag angripa det.
Programmets enda uppgift är ju att kolla temperaturer
då kan det sova större delen av sitt liv.
I en bas Modul
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function GetInputState Lib "user32" () As Long
Public Sub Main()
Do
'Kod som läser och fixar
Sleep(60000)
If GetInputState() Then DoEvents
Loop
End Sub
/SvenSv: Stack Space
Förmodligen vet du redan,men den gör ingen skada.
"Har de vatt nått" betyder det ungefär.
Behövs nog inte här eftersom det gäller mus eller tangentbord.
Som sagt den gör ingen skada,vet inte hur det blir med Ctrl Alt Delete.
/Sven