Español
Stammtisch & Café

Cuestión: Nur el Callback gemerkt - stimmt el wirklich?

 
¡Hola Personas...

Lo va en [...] .
Hier es folgendes:



The fix added a check to see if the address specified en the WM_TIMER mensaje qué registered as a call-back before taking the branch.


Keine Idea, si Yo en el Artikel algo falso verstanden oder überlesen habe, aber para mich heißt el folgendes:
Der Callback se por SetTimer registriert. Beim Aufruf de SetTimer merkt se el Aufrufende Prozess el Adresse el Callbackfunktion. Trifft una Timmermessage una, se nun simplemente nahgesehen, si el Prozess el el Callback ausführen se se vorher el Adresse gemerkt ha - es esto no es el Fall, kommt el Timernachricht de una otro Prozess.
¿Por qué funktioniert entonces aber el no?
KompilierenMarcaSeparación
Def @SetTimer(4) !USER32,SetTimer
Def @KillTimer(2) !USER32,KillTimer
DEF @GetDlgCtrlID(1) !USER32,GetDlgCtrlID
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Declare Button&,TIMER_ID&,Zähler&
Clear TIMER_ID&
Windowstyle 31+512
WindowTitle Timer empfangen
Window 0,0-640,440
Usermessages $10
Let Button&=@CreateButton(%HWND,Timer setzen,20,200,200,30)
Print Handle des Hauptfensters: +@STR$(%HWND)
Print Adresse der Prozedur: +@STR$(@ProcAddr(TimerProc,4))

While %UMESSAGE<>$10

    Waitinput

    IF @ButtonClicked(Button&)

        Enablewindow Button&,0
        LET TIMER_ID&=999
        @SetTimer(%HWND,TIMER_ID&,60000,@ProcAddr(TimerProc,4))

    endif

wend

IF TIMER_ID&<>0

    @KillTimer(%HWND,TIMER_ID&)

endif

End

Proc TimerProc

    Parameters FensterHandle&,T_Message&,T_ID&,SYS_TIME&
    Color 12,15
    Locate 3,0
    LET Zähler&=Zähler&+1
    Print Timer angekommen: +@STR$(T_ID&)+    +@STR$(SYS_TIME&)+    +@STR$(Zähler&)+@Space$(20)

ENDPROC


KompilierenMarcaSeparación
Def @SetTimer(4) !USER32,SetTimer
Def @KillTimer(2) !USER32,KillTimer
DEF @GetDlgCtrlID(1) !USER32,GetDlgCtrlID
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Def @GetLastError(0) !KERNEL32,GetLastError
Def @SetLastError(1) !KERNEL32,SetLastError
DEF @AHFormatMessage(7) !KERNEL32,FormatMessageA
Declarar Button&,TIMER_ID&,Button2&,Fenster&,Ventana$,PR_ADDR&,PR_ADDR$,Rück&,FH&
Declarar AHRückgabe&,AHGETERROR_Buffer#,AHGETERROR_Buffer$,Zähler&
Claro TIMER_ID&
Windowstyle 31+512
Título de la ventana Temporizador senden
Ventana 0,0-640,440
Usermessages $10
Let Button&=@CreateButton(%HWND,Temporizador conjunto,20,200,200,30)
Let Button2&=@CreateButton(%HWND,Temporizador puesto,20,250,200,30)
LET FH&=@FindWindow(Temporizador empfangen)
Let Ventana$=@Entrada$(Fensterhandle eingeben:,Handle uno Fensters?,@STR$(FH&))
LEt Fenster&=@VAL(Ventana$)

IF Ventana$<>

    LET PR_ADDR$=@Entrada$(Prozeduradresse eingeben:,Adresse el TimerProc?,@STR$(@ProcAddr(TimerProc,4)))

    IF PR_ADDR$<>

        LET PR_ADDR&=@VAL(PR_ADDR$)

        Mientras que %UMESSAGE<>$10

            Waitinput
            LET TIMER_ID&=999

            IF @ButtonClicked(Button&)

                CLS
                Localizar 0,0
                @SetLastError(0)
                LET RÜCK&=@SetTimer(%HWND,TIMER_ID&,60000,PR_ADDR&)
                Let AHRückgabe&=@GetLastError()
                Fehlercode_bestimmen
                Imprimir AHGETERROR_Buffer$
                @SetLastError(0)
                LET RÜCK&=@SetTimer(Fenster&,TIMER_ID&,1000,PR_ADDR&)
                Let AHRückgabe&=@GetLastError()
                Fehlercode_bestimmen
                Imprimir AHGETERROR_Buffer$

            Elseif @ButtonClicked(Button&)

                @PostMessage(Fenster&,$113,TIMER_ID&,PR_ADDR&)

            endif

        wend

        IF TIMER_ID&<>0

            @KillTimer(Fenster&,TIMER_ID&)
            @KillTimer(%HWND,TIMER_ID&)

        endif

    Endif

endif

End

Proc TimerProc

    Parámetros FensterHandle&,T_Message&,T_ID&,SYS_TIME&
    LET T_ID&=TIMER_ID&
    Color 12,15
    Localizar 3,0
    LET Zähler&=Zähler&+1
    Imprimir Temporizador angekommen: +@STR$(FensterHandle&)+    +@STR$(T_ID&)+    +@STR$(SYS_TIME&)+    +@STR$(Zähler&)+@Espacio$(20)

ENDPROC

Proc Fehlercode_bestimmen

    DIM AHGETERROR_Buffer#,32000
    @AHFormatMessage($1000,0,AHRückgabe&,0,AHGETERROR_Buffer#,32000,0) Wandelt Fehlercode en Landesspezifische Message en.
    Let AHGETERROR_Buffer$=@TRIM$(@STRING$(AHGETERROR_Buffer#,0))
    Disponer AHGETERROR_Buffer#

ENDPROC


Verschweigt como Microsoft qué? (gilt para WindowsXP SP2, Windows2000 SP4)
 
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

783 Views

Untitledvor 0 min.
Axel Berse07.11.2023
H.Brill26.01.2023
Ernst02.03.2015
gerd12.01.2013

Themeninformationen

Dieses Thema ha 1 subscriber:

unbekannt (1x)


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