Español
Foro

Gefahr schlimmer Crashes ca. ProcAddr en Callbacks, Hilos

 
¡Hola IF...

Yo habs veces getestet y hoffe nichts falso gemacht a haben:
KompilierenMarcaSeparación
 $U thread.pcu = thread.
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)
thread.start 1,1

WhileNot Ende%

    WaitInput

    If @MenuItem(108)

        Einstellungen

    Endif

    If @MenuItem(109)

        thread.stopall
        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 thread.do

    parameters n&
    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"
    ENDPROC


Auch hier se el Ventana no correcto adecuado!
Was bedeutet el? Werden en el Hauptprogramm während un hilo ausgeführt, überschreibt Profano intern gespeicherte Variables para Aufrufen de API. Je después de, welche Profanfunktionen en el Hauptprogramm verwendet voluntad, Es el Gefahr veces mehr y veces weniger gegeben, ellos es aber auch (laut Roland) beim direkten Aufrufen de APIs disponible. Wann y si una Fehler auftritt, hängt vom gewählten Zeitintervall, vom Rechner y de el Programmbedienung por el User de.
Was bedeutet el genau?

Ein Ejemplo:
Beim una Rechner bajo Windows2000 se beim Aufruf el API RegUnloadKey una solcher Crash verursacht y el API se deshalb no korrekt ausgeführt. Daraufhin se el Registryhive des User no como geplant entladen y es beim nächsten Start no mehr verfügbar => una ganzes Userprofile es unwiederbringlich perdido.

Ein anders Ejemplo:
Das Hauptprogramm schreibt während una Callback se ejecuta en el Registry. Como alles ungünstig zusammentrifft, se en una otro Schlüssel geschrieben y Datenj en el Registry ir perdido!

Weitere Fragen y Anmerkungen?
 
09.09.2006  
 



Was Usted sagst bedeutet el sobald una Procedimiento, welcher por ProcAddr a una Api transferencia wurde, de uno Api en lugar de de XProfan incluso aufgerufen se, XProfan esto no es korrekt auseinanderhalten kann y Variablenspeicher überschrieben voluntad?

Nun el wäre fatal, especialmente el sí entonces en efecto el FastMode betrifft, y jede APP welcher una propio wProc besitzt así potenziell como muy gefährlich eingestuft voluntad debería. Das betrifft also Callbacks y Subclassing.

Aber Yo tener ne Abhilfe - hoffentlich - como verhält lo si se no Variablenbezeichnung - en keiner Procedimiento - widerholt? Selbe Problema? *después de*Roland*schrei*sólo*el*kanns*wissen*

Wenn mi AbhilfeIdee el problema sin embargo beseitigen debería - entonces hieße lo auch el una rein-en-OOP-basiertes Programa möglicherweise weniger gefährlich ser podría?
 
09.09.2006  
 



Ah Yo sehe auch Usted hast en Deinem Demo una Referencia de No beachtet, welcher besagte el sólo el Waitinput con Hilo.Start y Hilo.Stop umschlossen ser debería!

Yo el Source veces así geändert Yo me vorstelle y empfehle, y siehe como, lo son no Problemas:
KompilierenMarcaSeparación
 $U Thread.pcu = Thread.
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)

Whilenot Ende%

    .waitinput

    If @Menuitem(108)

        Einstellungen

    Endif

    If @Menuitem(109)

        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 Thread.do

    Parameters N&
    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

proc .waitinput

    thread.start 1
    Waitinput
    thread.stopn class=s2>1

ENDPROC

 
09.09.2006  
 



¡Hola IF...

Nein, kein Variablenspeicher - el wäre no así schlimm.
Mi Erklärung:
Wenn una Profanfunktion, z.B. Crear, ausgeführt se, muß Crear sólo una vez auseinandergepflückt voluntad. Lo muß u.a. überprüft voluntad, welche API Crear aufrufen se. Dazu necesario Daten gespeichert y verglichen voluntad.
Wenn nun mitten en el vergleich el Callback ausgeführt se (bevor el API aufgerufen wurde), voluntad esta Daten überschrieben y si la Callback zurückkehrt, es hay wo ahora el API Call verglichen voluntad debería, sólo todavía Mist.
 
09.09.2006  
 



Naja aber gehe doch veces el hier de me geschriebene una:

[quote:ca377de2a5]Was Usted sagst bedeutet el sobald una Procedimiento, welcher por ProcAddr a una Api transferencia wurde, de uno Api en lugar de de XProfan incluso aufgerufen se, XProfan esto no es korrekt auseinanderhalten kann y Variablenspeicher überschrieben voluntad?

Nun el wäre fatal, especialmente el sí entonces en efecto el FastMode betrifft, y jede APP welcher una propio wProc besitzt así potenziell como muy gefährlich eingestuft voluntad debería. Das betrifft also Callbacks y Subclassing.

Aber Yo tener ne Abhilfe - hoffentlich - como verhält lo si se no Variablenbezeichnung - en keiner Procedimiento - widerholt? Selbe Problema? *después de*Roland*schrei*sólo*el*kanns*wissen*

Wenn mi AbhilfeIdee el problema sin embargo beseitigen debería - entonces hieße lo auch el una rein-en-OOP-basiertes Programa möglicherweise weniger gefährlich ser podría?[/quote:ca377de2a5]
Diese Vermutung de Usted Tuve aber auch ya damals, por lo tanto empfahl Yo en efecto folgendes:

[quote:ca377de2a5]Ah Yo sehe auch Usted hast en Deinem Demo una Referencia de No beachtet, welcher besagte el sólo el Waitinput con Hilo.Start y Hilo.Stop umschlossen ser debería![/quote:ca377de2a5]
 
09.09.2006  
 



Rolands antwort darauf debería eigendlich ser, daß si uno CallBacks nutzt, y/oder el Fastmode, el una continuación sólo reine API escribir darf. Yo glaube aber el daß así no pensamiento es, oder?
 
09.09.2006  
 



¡Hola IF...

Un gute Concepto en el a umgehen, doch manchmal möchte (muß) uno eben GetMessage uso.

Saludo

Andreas
 
09.09.2006  
 



[quote:14713789fd=Andreas Hötker]¡Hola IF...

Un gute Concepto en el a umgehen, doch manchmal möchte (muß) uno eben GetMessage uso.

Saludo

Andreas[/quote:14713789fd]
Ist me klar - pero son nunmal no Función / Procedimiento / Unit / qué De todos modos welche en 100% aller Fälle/Situationen siempre correcto es o. korrekt adecuado es.

Viel schlimmer - tiempos de el thread.pcu abgesehen - finde Todavía todos con el Callbacks!
 
09.09.2006  
 



Wir son also beim Thema XProfansche Critical-Sections angekommen
 
09.09.2006  
 



[quote:a00f5c25f8=iF]Naja aber gehe doch veces el hier de me geschriebene una:

[quote:a00f5c25f8]Was Usted sagst bedeutet el sobald una Procedimiento, welcher por ProcAddr a una Api transferencia wurde, de uno Api en lugar de de XProfan incluso aufgerufen se, XProfan esto no es korrekt auseinanderhalten kann y Variablenspeicher überschrieben voluntad?

[/quote:a00f5c25f8][/quote:a00f5c25f8]
Erst una vez no Variables, pero de Profano intern genutzte Estructuras
Außerdem es no a Übergabe uno Prozeduradresse, pero en el, qué en el Hauptprogramm passiert.

¿Por qué haut el hin, qué du como tust:
Usted stoppst el Temporizador, bevor el Ventana genera se => el kann no crashen, el el Temporizador se ejecuta nada, si el Ventana genera se.
Nochmal (1001 veces ):
Theorie:
1 Profano arbeitet´die Crear Función la ventana de.
2. Profano legt esta Daten de Crear en internen Speicher de, en u.a. a überprüfen, welche API aufgerufen weerden muß.
3. Antes el API Crear komplett abgearbeitet es, d.h. bevor el API CreateWindowEx de Profano aufgerufen se, ruft el OS el el Temporizador mitgegebene Adresse en.
4. Profano führt Características en el Callback de y belegt el internen Variables con neuen Werten.
5. Der Callback se a para Ende ausgeführt y lo se a el Adresse gesprungen, a el vorher aufgehört wurde.
6. Profano voluntad CreateWindowEx aufrufen, hier posición aber ahora el Daten vom Callback

So mi Yo el...
 
09.09.2006  
 



Usted Yo weiß en Su Theorie, auch no sólo seid Deinem heutigen Posting pero me va el Ganze ya muy largo por el Kopf...

...por lo tanto meinte Yo sí el lo demzufolge no sólo TimerOPs betrifft pero jede Api welche una XProfanProzedur aufruft!
 
09.09.2006  
 



Yo glaube lo son para Roland el Möglichkeit, una Aufruf uno XProfanprozedur de uno API heraus, abzuprüfen. Yo denke incluso lo wäre sonst el Función procaddr  garnicht posible - irgendwie muss él sí el angeblichen Sprung a una no-nativ-vorliegenden Prozeduradresse umsetzen. Tal vez kann él hier algo kapseln?!
 
09.09.2006  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

4.345 Views

Untitledvor 0 min.
H.Brill26.01.2023
Peter Max Müller13.11.2017
iF19.07.2015
Ernst02.03.2015

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie