Deutsch
C ++ Forum

Zugriffsverletzungen bei Callbacks über TIimer...

 
- Seite 1 -


Hallo Sebastian...

Es geht um folgenden Quelltext aus [...]  Thread:
KompilierenMarkierenSeparieren
Testprogramm Timer
Profan Version 9
 $H Windows.ph
-Proc Einstellungen

Proc Einstellungen

    Declare hD%, hA%, hB%, OK%, hTime%
    Declare hF1%, hT1%
    Clear OK%
    Dialogfenster erzeugen
    hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
    hF1% = @Create("Font","Arial",16,0,0,0,0)
    hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
    SetFont hT1%,hF1%
    hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
    hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
    hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)

    WhileNot Ok%

        WaitInput

        If @Clicked(hB%)  Nachstellen

            Ok% = 1
            Aktionen hier

        ElseIf @Clicked(hA%) Abbrechen

            Ok% = 1

        ElseIf (%Key = 2) ALT+F4 bzw. schließen

            Ok% = 1

        EndIf

    EndWhile

    DeleteObject hF1%
    @DestroyWindow(hD%)

EndProc

-Prozedur die in bestimmten Zeitintervallen ausgefuehrt wird (4x pro Sekunde)

Proc Timer

    Inc Timer_Busy%
    Locate 5,5
    Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"

EndProc

-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
WindowStyle 26
WindowTitle "Timertest PHU-60"
Window 100,100 - 370,200
cls
Timer setzen (4x pro Sekunde, 250ms)
Declare TimerID&
TimerID& = ~SetTimer(0, 0, 250, @ProcAddr("Timer", 0))
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0

WhileNot Ende%

    WaitInput

    If @MenuItem(108)

        Einstellungen

    Endif

    If @MenuItem(109)

        ~KillTimer(0, TimerID&)
        Ende% = 1

    Endif

Wend

End

Bei meinen Profan2Cpp Versionen gibts es nicht nur Kuddelmuddel im Dialogfenster, sondern es entsteht sogar (zeitweise) eine Zugriffsverletzung. Kann man das irgendwie beheben?
[...]  ist die Erklärung für Profan.
 
06.09.2006  
 



 
- Seite 1 -


Aktuelle Beta noch nicht, mache ich aber noch. Der Fehler tritt auf, wenn über das Menü der Dialog aufgerufen wird - aber nicht immer (Rechnerabhängig). Im Anhang ist meine EXE.

2 kB
Hochgeladen:06.09.2006
Ladeanzahl80
Herunterladen
 
06.09.2006  
 



Hast du mal den Downloadlink?
Bei der Beta, die ich mir eben heruntergeladen habe, tritt der Fehler immer noch auf (Zugriffsverletzung), ist bloß seltener...
 
06.09.2006  
 




Sebastian
König
Mit dem zweiten Code konnte ich unter XProfan selbst den Fehler jetzt reproduzieren (Dialogfenster bleibt leer und reagiertt nicht auf Schließen). Mit Profan2Cpp allerdings trotz zahlreicher Versuche allerdings noch immer nicht... liegt es vielleicht wirklich an meinem System oder müsste der Fehler, wenn er auf einem Rechner mit XProfan auftritt auch mit Profan2Cpp auftreten?

Was ich schon sagen kann ist, dass zumindest die Ursache mit Profan2Cpp eine andere sein müsste. Hier nutzen nämliche nur normale Prozeduren den gemeinsamen Parameter-Stack - bei CallBack-Funktionen und eingebauten Befehlen und Funktionen wird der ganz normale Stack (wie in ASM) zur Übergabe benutzt, sodass sich hier die Aufrufe nicht gegenseitig stören können...

P.S.: Deine EXE ist leider nur die .cpp-Datei...
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.09.2006  
 




Sebastian
König
[quote:f458ed4358]Hast du mal den Downloadlink?
Bei der Beta, die ich mir eben heruntergeladen habe, tritt der Fehler immer noch auf (Zugriffsverletzung), ist bloß seltener... [/quote:f458ed4358]
Hier der direkte Link: [...] .

Welche Version genau hast Du denn jetzt?
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.09.2006  
 



Zeigt 1.5a an. Die EXE habe ich neu hochgeladen (hoffentlich jetzt richtig, komme gerade aus der Nachtschicht )
 
06.09.2006  
 




Sebastian
König
[quote:bebe64f95b]Zeigt 1.5a an.[/quote:bebe64f95b] Ok, die ist schon wieder relativ alt . Unter dem Link oben findest Du die aktuelle Beta-Version 1.5.9f. Darin sind neben einigen Bugfixes auch schon die neuen XProfan 10-Features enthalten.

[quote:bebe64f95b]Die EXE habe ich neu hochgeladen (hoffentlich jetzt richtig, komme gerade aus der Nachtschicht )[/quote:bebe64f95b] Ähmm... wo? Unter dem Link oben befindet sich immer noch die gleiche Datei... (EDIT: ich sehe gerade: der doppelte Begriff Link oben ist natürlich kontextabhängig zu interpetieren )
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.09.2006  
 



Hallo Sebastian...

Ich werde einen Quelltext ,bauen bei dem das Problem häufiger auftritt, kann aber etwas dauern....
 
06.09.2006  
 




Sebastian
König
[quote:5ea9f5dcc3]Ich werde einen Quelltext ,bauen bei dem das Problem häufiger auftritt, kann aber etwas dauern.... [/quote:5ea9f5dcc3]
Super - danke!

Dann tritt das Problem also auch mit 1.5.9f noch auf? Wenn ja, habe ich noch eine Idee: Versuch mal bitte, den SetTimer-Aufruf so zu gestalten:

P2CPP: <USE_CALL_ST,USE_EXTERNAL_ST>
Timerid& = ~Settimer(%Hwnd,333,25,@Procaddr(Timer,4))
P2CPP: </USE_CALL_ST,/USE_EXTERNAL_ST>

(funktioniert allerdings noch nicht mit 1.5a) Vielleicht liegt die Ursache ja im Multithread-Konzept der übersetzten Programme...
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.09.2006  
 



Ob der Fehler Auftritt oder nicht hängt u.a. von der Speicherauslastung ab. Unter der neuen Beta konnte ich den Fehler noch nicht nachvollziehen. Unter Windows2000 hatte ich auch mit der älteren Profan2Cpp Version bislang noch keine Fehlermeldung. Melde mich wieder.
 
06.09.2006  
 



 
- Seite 2 -


Hallo Sebastian...

Gute Nachrichten => in der neuen Beta ist der Fehler nicht mehr vorhanden, die läuft tadellos.

Im Anhang das Testprogramm mit den beiden Profan2Cpp Versionen kompilert. Timerbug3.exe verursacht bei mir den Fehler unter Windows98, Timerbug4.exe nicht.

Gruß

Andreas
KompilierenMarkierenSeparieren
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Testprogramm Timer
Profan Version 9
 $H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%,Durch%
Declare TimerID&,Create%,T_Text&,Test#
WindowStyle 26
WindowTitle "Timertest mir Profan2Cpp Version 1.5.9f"
Window 100,100 - 370,200
cls
Let T_TEXT&=@CREATETEXT(%HWND,"",30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Timer setzen (4x pro Sekunde, 250ms)
TimerID& = ~SetTimer(%HWND,333,20,@ProcAddr("Timer",4))
Settimer 100

WhileNot Ende%

    WaitInput

    IF @RND(10)=1

        Setmenuitem 108

    endif

    If @MenuItem(108)

        Einstellungen

    Endif

    If @MenuItem(109)

        ~KillTimer(%HWND,333)
        Ende% = 1

    Endif

Wend

End
-Proc Einstellungen

Proc Einstellungen

    Declare hD%, hA%, hB%, OK%, hTime%
    Declare hF1%, hT1%
    Clear OK%
    Dialogfenster erzeugen
    hD% = @Create("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
    hF1% = @Create("Font","Arial",16,0,0,0,0)
    hT1% = @Create("Text",hD%,"Einstellungen...",10,10,220,20)
    SetFont hT1%,hF1%
    hTime% = @Create("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
    hB% = @Create("Button",hD%,"&Nachstellen",10,120,100,28)
    hA% = @Create("Button",hD%,"&Abbrechen",120,120,100,28)

    WhileNot Ok%

        WaitInput

        IF @RND(30)=1

            LET OK%=1

        endif

        If @ButtonClicked(hB%)  Nachstellen

            Ok% = 1
            Aktionen hier

        ElseIf @ButtonClicked(hA%) Abbrechen

            Ok% = 1

        ElseIf (%Key = 2) ALT+F4 bzw. schließen

            Ok% = 1

        EndIf

    EndWhile

    DeleteObject hF1%
    @DestroyWindow(hD%)

EndProc

-Prozedur die in bestimmten Zeitintervallen ausgefuehrt wird (4x pro Sekunde)

Proc Timer

    Parameters P1&,P2&,P3&,P4&

    IF Durch%=0

        LET Durch%=1
        Dim Test#,1000000
        Inc Timer_Busy%
        Locate 7,5
        Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
        Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
        Drawtext 30,0,@Time$(0)
        Drawtext 100,0,@Time$(1)
        Dispose Test#
        Let Durch%=0

    endif

EndProc


265 kB
Hochgeladen:06.09.2006
Ladeanzahl56
Herunterladen
 
06.09.2006  
 




Sebastian
König
Hallo Andreas,

[quote:fc655c1c78]Gute Nachrichten => in der neuen Beta ist der Fehler nicht mehr vorhanden, die läuft tadellos.[/quote:fc655c1c78]
Ok, super! Ist natürlich schwer zu sagen, aber ich vermute mal, dass die oben schon erwähnte Anpassung in 1.5.9f das Problem gelöst hat...

[quote:fc655c1c78]Im Anhang das Testprogramm mit den beiden Profan2Cpp Versionen kompilert. Timerbug3.exe verursacht bei mir den Fehler unter Windows98, Timerbug4.exe nicht.[/quote:fc655c1c78]Ganz sicher? Bei mir ist es nämlich genau umgekehrt - 4 stürzt ab, 3 nicht... Timerbug3 ist laut Titelzeile auch die, die mit 1.5.9f erstellt wurde.

MfG

Sebastian
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
06.09.2006  
 



[quote:a8aaf87176=Sebastian König]Hallo Andreas,

[quote:a8aaf87176]Im Anhang das Testprogramm mit den beiden Profan2Cpp Versionen kompilert. Timerbug3.exe verursacht bei mir den Fehler unter Windows98, Timerbug4.exe nicht.[/quote:a8aaf87176]Ganz sicher? Bei mir ist es nämlich genau umgekehrt - 4 stürzt ab, 3 nicht... Timerbug3 ist laut Titelzeile auch die, die mit 1.5.9f erstellt wurde.

MfG

Sebastian[/quote:a8aaf87176]
Hallo Sebastian...

Ja, hast Recht - hab mich vertan.

Gruß

Andreas
 
06.09.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.663 Betrachtungen

Unbenanntvor 0 min.
gerd12.01.2013

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

unbekannt (9x)
Sebastian König (6x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie