Deutsch
C ++ Forum

Zugriffsverletzungen bei Callbacks über TIimer...

 
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  
 



Hier tritt er häufiger auf:
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%
Declare TimerID&,Create%,T_Text&,Test#
WindowStyle 26
WindowTitle "Timertest PHU-60"
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,25,@ProcAddr("Timer",4))

WhileNot Ende%

    WaitInput

    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 @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&
    Dim Test#,1000000
    Inc Timer_Busy%
    Locate 5,5
    Print "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Dispose Test#

EndProc

 
06.09.2006  
 




Sebastian
König
Hallo Andreas,

seltsam - ich konnte den beschriebenen Fehler bei mir (WinXP Prof. SP2 auf aktuellem Update-Stand) leider nicht reproduzieren... weder Zugriffsverletzung noch Kuddelmuddel treten auf.

Hast Du es auch schon mit der aktuellen Beta-Version 1.5.9f getestet? Dort habe ich nämlich u.a. ein Detail bei der Behandlung von CallBack-Funktionen-Funktionen geändert, das sonst evtl. zu Problemen hätte führen können...

MfG

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



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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.640 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