Ik ben bezig om voor mijn studie een progje te klussen dat een berg iteratief rekenwerk doet. Van tijd tot tijd gebeurt het me dat tijdens het rekenen mijn PC op standby lijkt te gaan iod: monitor op standby, je hoort de HD's downspinnen. Het lukt me niet om de fout op een bepaald moment te reproduceren.
Voor de chemici onder de lezers: het programma rekent een p-x,y diagram door via de Peng-Robson EOS.
Voor de UT-ers: Fasenleer 
Eerste ingeving: het ligt aan de belasting van mijn Athlon 1200 (non-oc-d) met Windows 2000 Pro, volledig gepatched. Kan bijna niet, aangezien er al tijdenlang een SoB-client op de achtergrond full-pool aan het rekenen is. Het enige verschil ermee is dat dat een ander prog is dan mijn app.
Voor de liefhebber: Reptile209.zip (24 kB) de (niet voor publicatie aangepaste
) code.
Tweede mogelijkheid: het ligt aan mijn code. Maar waar dan? Korte programmaschets (Delphi 6.0 dus, draaiend in de IDE):
• Een TForm.Button1Click die het volgende doet:
• Een for-lus met daarbinnen een while-lus die moet itereren naar een eindwaarde
• In de while wordt als eerste Application.ProcessMessages aangeroepen om mijn form in leven te houden.
• Vanuit de while worden een paar losse functies aangeroepen die wat rekenwerk verrichten. Niks exotisch: +, -, /, *, exp(), ln(), power() en sqrt(). Kan het power() zijn, omdat ik die anders nooit gebruik en dus nooit eerder een probleem is geweest? Zal nog een versie met een eigen power() proberen, hopen dat dat nog wat uitmaakt.
• Een paar labels tonen wat tussenwaarden
• Steeds als de while-lus klaar is, gaan de resultaten naar een TMemo.
Mijn app maakt géén gebruik van:
• threads (op de standaard TForm na dan he...)
• eigen geheugenallocatie
• pointers (alleen standaard array[1..2] gebeuren, niet eens groot dus)
• Recusieve dingen die het geheugen vol-lellen
Derde optie:
In mijn eventlog staat, nadat alles na mijn harde reset weer draait:
Hoe kan een relatief simpel programma als dit nou een STOP veroorzaken?
Dusss
Waar moet ik in g*dsnaam gaan zoeken naar de oplossing voor dit probleem?
Wordt Application.ProcessMessages te vaak gebruikt (kan dat "te vaak"? Nee toch?) Is er "iets" in Delphi dat random foute code genereert? Toch alleen een driver die onder sommige "omstandigheden" flipt? Toch hardware?
Aaarrrggghh

PS. Ik hoop uit de replies op te kunnen maken dat het idd een Delphi - en dus P&W - probleem is. Zo niet, dan moet ik mijn geluk gaan beproeven in WOS, PM&G of desnoods OH...
Voor de chemici onder de lezers: het programma rekent een p-x,y diagram door via de Peng-Robson EOS.
Eerste ingeving: het ligt aan de belasting van mijn Athlon 1200 (non-oc-d) met Windows 2000 Pro, volledig gepatched. Kan bijna niet, aangezien er al tijdenlang een SoB-client op de achtergrond full-pool aan het rekenen is. Het enige verschil ermee is dat dat een ander prog is dan mijn app.
Voor de liefhebber: Reptile209.zip (24 kB) de (niet voor publicatie aangepaste
Tweede mogelijkheid: het ligt aan mijn code. Maar waar dan? Korte programmaschets (Delphi 6.0 dus, draaiend in de IDE):
Delphi:
• Formpje om wat startwaarden in te voeren1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| ... procedure TForm1.Button1Click() begin ... for n := 1 to 100 begin ... foo1() ... while (x<.01) do begin Application.ProcessMessages; ... bar1() ... x := foo2() ... end; // Memo1 bijwerken end; end; |
• Een TForm.Button1Click die het volgende doet:
• Een for-lus met daarbinnen een while-lus die moet itereren naar een eindwaarde
• In de while wordt als eerste Application.ProcessMessages aangeroepen om mijn form in leven te houden.
• Vanuit de while worden een paar losse functies aangeroepen die wat rekenwerk verrichten. Niks exotisch: +, -, /, *, exp(), ln(), power() en sqrt(). Kan het power() zijn, omdat ik die anders nooit gebruik en dus nooit eerder een probleem is geweest? Zal nog een versie met een eigen power() proberen, hopen dat dat nog wat uitmaakt.
• Een paar labels tonen wat tussenwaarden
• Steeds als de while-lus klaar is, gaan de resultaten naar een TMemo.
Mijn app maakt géén gebruik van:
• threads (op de standaard TForm na dan he...)
• eigen geheugenallocatie
• pointers (alleen standaard array[1..2] gebeuren, niet eens groot dus)
• Recusieve dingen die het geheugen vol-lellen
Derde optie:
In mijn eventlog staat, nadat alles na mijn harde reset weer draait:
Dus eigenlijk een windows/driver probleem. Automatically Reboot staat uit, dus blijkbaar gaat windows over zijn nek bij het afdrukken van een BSOD.The computer has rebooted from a bugcheck. The bugcheck was: 0x0000000a (0x00000018, 0x000000ff, 0x00000000, 0x8046937c).
Hoe kan een relatief simpel programma als dit nou een STOP veroorzaken?
Dusss
Waar moet ik in g*dsnaam gaan zoeken naar de oplossing voor dit probleem?
Wordt Application.ProcessMessages te vaak gebruikt (kan dat "te vaak"? Nee toch?) Is er "iets" in Delphi dat random foute code genereert? Toch alleen een driver die onder sommige "omstandigheden" flipt? Toch hardware?
Aaarrrggghh
PS. Ik hoop uit de replies op te kunnen maken dat het idd een Delphi - en dus P&W - probleem is. Zo niet, dan moet ik mijn geluk gaan beproeven in WOS, PM&G of desnoods OH...
[ Voor 10% gewijzigd door Reptile209 op 14-09-2004 00:52 ]
Zo scherp als een voetbal!