Français
Forum

péril schlimmer Crashes GT. ProcAddr chez Callbacks, Threads

 
- page 1 -


allô IF...

je habs la fois getestet et hoffe rien faux gemacht trop avons:
KompilierenMarqueSéparation
 $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


aussi ici wird cela la fenêtre pas richtig angezeigt!
quoi bedeutet cela? Werden im Hauptprogramm au cours de un fil fonctionnement, überschreibt Profan interne gespeicherte Variablen zum Aufrufen de API. Je après que, quelle Profanfunktionen im Hauptprogramm verwendet volonté, ist qui péril la fois plus et la fois moins gegeben, vous ist mais aussi (le son Roland) beim direkten Aufrufen de APIs vorhanden. quand et si un faute auftritt, hängt vom gewählten Zeitintervall, vom calculateur et de qui Programmbedienung par den User ab.
quoi bedeutet cela oui c'est ca?

un Beispiel:
Beim einem calculateur sous Windows2000 wird beim Aufruf qui API RegUnloadKey un solcher Crash verursacht et qui API wird c'est pourquoi pas korrekt fonctionnement. Daraufhin wird qui Registryhive des User pas comment geplant entladen et ist beim prochain Start pas plus disponible => un ganzes Userprofile ist unwiederbringlich verloren.

un anders Beispiel:
cela Hauptprogramm écrit au cours de un Callback fonctionne dans qui Registry. là alles ungünstig zusammentrifft, wird dans une anderen Schlüssel geschrieben et Datenj dans qui Registry aller verloren!

Weitere Fragen et Anmerkungen?
 
09.09.2006  
 



 
- page 3 -


faux verstanden, mon je. Roland hat déjà jadis geantwortet - dans seinem Forum .
Probiers doch aus - schreib den Callback dans un DLL et spreche ihn de Profan sur SetTimer à - cela dauert doch seulement wenige Minuten et je kanns pas.
 
09.09.2006  
 



je wüsste maintenant malheureusement Rolands Beitrag en supplément pas - schreib den Callback dans un DLL et spreche ihn de Profan sur SetTimer à peux je pas umsetzen, qui Aufgabenstellung verstehe je pas.

si es hilft qui Problematik quelque chose entgegenzuwirken ensuite seulement raus avec cela...
 
09.09.2006  
 



Comme je le disais - schreib irgendeine Funktion dans un DLL et ruf den Callback dans einem Profanprogramm avec SetTimer sur - alors aus diesem Voir le texte source
KompilierenMarqueSéparation
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"
    se Test#

ENDPROC


sol cela
KompilierenMarqueSéparation
Proc Minuteur

    Paramètres P1&,P2&,P3&,P4&
    Faible Test#,1000000
    Inc Timer_Busy%
    Localiser 5,5
    Imprimer "Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Settext T_Text&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Dispose Test#

ENDPROC


dans une Funktion einer DLL untergeracht volonté.

ici steht [...]  trop dem Problem, et ici steht [...] .
 
09.09.2006  
 



Aha j'ai qui pour mich entscheidene Aussage de Roland la fois extrahiert:

[quote-part:a314d200ca] qui CallBacks dans XPofan habe je oui aussi plutôt pour qui Fälle incorporé, wohin une API-Funktion une CallBack-Prozdur nécessaire et seulement zurückkehrt, après que cet fonctionnement wurde. [/quote-part:a314d200ca]
cet Aussage begründet le moi entier et garnicht daneben liege si je sage cela qui Grundproblematik chez procaddr  liegt si une Proc de aussen aufgerufen wird. Den Roland selbst meint avec obiger Aussage oui aussi, cela es besser ist si cela XProfanprogramm wartet.

Demzufolge ist es égal si qui XProfanProc de qui Api SetTimer, ou bien per Call aus einer anderen DLL ausgelöst wird. si cela XProfanprogramm pas grade im Modus des wartens sur un Funktionsende ist - ensuite gibts mächtig trouble.

cela wiederum ists worüber je êtes procaddr grüble - quoi mais aussi bedeutet - cela Roland peut-être qui Aufzurufenden Funktionen derrière qui Procaddr-Adresse kapseln sollte - comment une Wartehalle - quelle ensuite par Roland abgebaut wird si XProfan meint cela es rien trop 1faire hat.
 
09.09.2006  
 



Comme je le disais: s'il te plaît Testen! intéressé mich brennend. Bau fois le Callback dans un DLL - dauert oui pas longtemps...
 
09.09.2006  
 



Jaja ne...aucune Problem - mais je comprends qui devoir toujours pas!

qui Callback dans un DLL construire

Schreib doch simple nen XProfan10 Zeiler pour cela XProfanprogramm, et un d'autre pour cela quoi je dans qui DLL erledigen soll! je glaub cet Syntax liegt mir plus... ;D
 
09.09.2006  
 



...car aussi ici scheinst du qui Moitié überlesen trop avons:
[quote-part:ce4ddc094d]
Votre Analyse trifft cela Problem droite oui c'est ca: chez Créer ist qui chance, qui qui Minuteur zur Unzeit (alors au cours de qui Abarbeitung des Befehles) ausgelöst wird, deutlich höher comme chez einem Contrôle et là quelque chose höher, comme chez einem direkten API-Aufruf, mais aussi là peux es pas 100%ig ausgeschlossen volonté.
[/quote-part:ce4ddc094d]
c'est oui c'est ca cela quoi je mon.
et cet
[quote-part:ce4ddc094d]
qui CallBacks dans XPofan habe je oui aussi plutôt pour qui Fälle incorporé, wohin une API-Funktion une CallBack-Prozdur nécessaire et seulement zurückkehrt, après que cet fonctionnement wurde.
[/quote-part:ce4ddc094d]
widerspricht deiner Aussage, cela alle Callbacks problematisch sommes. Comme je le disais, test!

Nochmals trop deinem Voir le texte source:
Ist un bon Workaround, doch pourrait on ensuite pas juste une Boucle avec einem Wartebefehl qui pour einer Eingabe abbricht einbauen? Zeitgerecht wird là doch gar rien plus fonctionnement, ou bien?
 
09.09.2006  
 



Ne Andreas, je habs pas überlesen - mais wir reden sur verschiedenen Leveln - je meins pas böse. je durchschaue qui Angelegenheit - tout autor ca va déjà longtemps pas plus.

je merke mais cela Du mich pas so entier verstehst - donc Votre attitude cela sich mon Posting avec dem citation widerspricht - quoi es mais dans mon Gedankenraum sogar untermalt.

Grunsatzdiskussion beiseite - laß uns demain à qui DLL feilen - mon Frauchen appelez...

Gute nuit!
 
09.09.2006  
 



OK! Gute nuit!
 
09.09.2006  
 




Frank
Abbing
[quote-part:5cd369ff12]Comme je le disais: s'il te plaît Testen! intéressé mich brennend. Bau fois le Callback dans un DLL - dauert oui pas longtemps...[/quote-part:5cd369ff12]
je hatte cela déjà gemacht. mon Dll hat une Fil erzeugt et cette hat une profansche Callbackroutine aufgerufen. Pour mehreren Aufrufen brach Profan avec den sonderlichsten Fehlermeldungen ab. Je kürzer qui Spanne qui Aufrufe, desto plus rapide kamen qui faute.
 
10.09.2006  
 



allô IF...

je denke la fois, nous voyons qui Problematik wirklich à verschiedenen se mettre.
ici qui Beweis, cela cela rien avec ProcAddr trop 1faire hat:
KompilierenMarqueSéparation
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
    Set("FastMode",1)
    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)
    Set("FastMode",0)

    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"
    ENDPROC


comment tu vois, cela allez - alors gibt es aussi avec Subclassing im Prinzip aucun Probleme, égal woran es liegen sollte. j'ai ici simple seulement cela Message Handling abgeschaltet - quoi wohl aussi une Ursache qui Problematik ist.

ici quelque chose zum Minuteur:
KompilierenMarqueSéparation
 $H Windows.ph
 $H Messages.ph
Déclarer Ende%, OldWndProc&, hButton%
Déclarer P_A$,P_A&,TIMERID&

Proc Timer_Sub

    Paramètres hWnd&,Message&,wParam&,lParam&

    Si Message& = ~WM_TIMER

        Localiser 0,0
        Imprimer "Timermessage dans WndProc empfangen: "+@STR$(wParam&)

    D'autre

        Retour ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)

    EndIf

ENDPROC

Set("Fastmode", 1)
Fenêtre 0,0 -640,440
LET P_A$=@INPUT$("Adresse qui TimerProc:","Funktionsadresse",@STR$(@ProcAddr("TimerProc",4)))

IF P_a$=»

    FIN

d'autre

    LET P_A&=@VAL(P_A$)

endif

OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Timer_Sub",4))
LET hButton%=@Créer("Button",%hWnd,"Ende",10,100,100,24)
TimerID& = ~SetTimer(%HWND,333,20000,P_A&)
Claire Ende%

WhileNot Ende%

    WaitInput

    Si %Key = 2

        Ende% = 1

    ElseIf @Clicked(hButton%)

        Ende% = 1

    EndIf

Endwhile

~KillTimer(%HWND,333)
~SetWindowLong(%hWnd,~GWL_WNDPROC,OldWndProc&)
Fin

Proc TimerProc

    Paramètres 1&,2&,3&,4&
    Localiser 2,0
    Imprimer "TimerProc sur Adresse aufgerufen: "+@STR$(3&)

endproc


comment on voit, erreicht qui Minuteur qui WndProc gar pas. Gib la fois im Éditer 0 un, statt qui Adresse - ensuite siehts anders aus.

ici encore la fois avec externer DLL (so comment je cela meinte):
qui DLL
KompilierenMarqueSéparation
 $DLL
-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)
Déclarer Timer_Busy%

dllproc Minuteur,4

    Paramètres P1&,P2&,P3&,P4&
    Faible Test#,1000000
    Inc Timer_Busy%
    Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Dispose Test#

ENDPROC


et ici cela Hauptprogramm
KompilierenMarqueSéparation
DEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
 $H Windows.ph
-Main----------------------------------------------------------------
Déclarer Ende%,DLL&,P_A&
Déclarer TimerID&,Créer%,T_Text&,Test#
LET DLL&=@Usedll("Thread.DLL")
Fenêtre Style 26+512
Titre de la fenêtre "Timertest PHU-60"
Fenêtre 100,100 - 370,200
cls
Usermessages $10
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
Imprimer P_A&,DLL&
Laisser T_TEXT&=@CREATETEXT(%HWND,»,30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Minuteur mettons (4x pro seconde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,P_A&)

WhileNot Ende%

    WaitInput

    IF %UMESSAGE=$10

        LET ENDE%=1

    endif

    Si @MenuItem(108)

        Einstellungen

    Endif

    Si @MenuItem(109)

        ~KillTimer(%HWND,T_TEXT&)
        Ende% = 1

    Endif

Wend

~KillTimer(%HWND,T_TEXT&)
FreeDLL DLL&
Fin
-Proc Einstellungen

Proc Einstellungen

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

    WhileNot Ok%

        WaitInput

        Si @ButtonClicked(hB%)  Nachstellen

            Ok% = 1
            Aktionen ici

        ElseIf @ButtonClicked(hA%) démolir

            Ok% = 1

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

            Ok% = 1

        EndIf

    Endwhile

    DeleteObject hF1%
    @DestroyWindow(hD%)

ENDPROC

-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)

Proc Minuteur

    Paramètres P1&,P2&,P3&,P4&
    Faible Test#,1000000
    Inc Timer_Busy%
    Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Dispose Test#

ENDPROC


Funktioniert également.
et ici zum comparaison sans DLL:
KompilierenMarqueSéparation
DEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
 $H Windows.ph
-Main----------------------------------------------------------------
Déclarer Timer_Busy%,Ende%
Déclarer TimerID&,Créer%,T_Text&,Test#
Fenêtre Style 26+512
Titre de la fenêtre "Timertest PHU-60"
Fenêtre 100,100 - 370,200
cls
Usermessages $10
Laisser T_TEXT&=@CREATETEXT(%HWND,»,30,30,300,30)
-Menue---------------------------------------------------------------
PopUp "&Programm"
AppendMenu 108,"&Einstellungen"
AppendMenu 109,"&Ende"
Ende% = 0
Minuteur mettons (4x pro seconde, 250ms)
TimerID& = ~SetTimer(%HWND,T_TEXT&,25,@ProcAddr("Timer",4))

WhileNot Ende%

    WaitInput

    IF %UMESSAGE=$10

        LET ENDE%=1

    endif

    Si @MenuItem(108)

        Einstellungen

    Endif

    Si @MenuItem(109)

        ~KillTimer(%HWND,T_TEXT&)
        Ende% = 1

    Endif

Wend

Fin
-Proc Einstellungen

Proc Einstellungen

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

    WhileNot Ok%

        WaitInput

        Si @ButtonClicked(hB%)  Nachstellen

            Ok% = 1
            Aktionen ici

        ElseIf @ButtonClicked(hA%) démolir

            Ok% = 1

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

            Ok% = 1

        EndIf

    Endwhile

    DeleteObject hF1%
    @DestroyWindow(hD%)

ENDPROC

-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)

Proc Minuteur

    Paramètres P1&,P2&,P3&,P4&
    Faible Test#,1000000
    Inc Timer_Busy%
    Settext P3&,"Timer:" + @str$(Timer_Busy%) + " Durchläufe"
    Dispose Test#

ENDPROC


quoi wieder den faute verursacht.
Meiner attitude pour liegt cet spezielle Problem wirklich à WM_TIMER - mais je beim besten Willen ne...aucune Experte et lasse mich aussi gern (am liebsten par beweisfähige Source) vom Gegenteil überzeugen.
 
10.09.2006  
 



et cet trois Source wären là sous anderem aussi encore intéressant:
KompilierenMarqueSéparation
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Timer
Profan Version 9
 $H Windows.ph
-Main----------------------------------------------------------------
Declare Timer_Busy%,Ende%
Declare TimerID&,Create%,T_Text&,Test#,T_TEXT2&
Declare OldWndProc&,DLL&,P_A&
LET DLL&=@Usedll("Send.DLL")
WindowStyle 26+512
WindowTitle "Subclassingtest"
Window 100,100 - 370,200
Let T_TEXT&=@CREATEButton(%HWND,"",30,80,300,30)
Let T_TEXT2&=@CREATEButton(%HWND,"Ende",30,120,300,30)
Waitinput
Set("FastMode", 1)
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Sub",4))
Ende%=0
TimerID&=~SetTimer(%HWND,333,20,P_A&)
Print TimerID&

WhileNot Ende%

    WaitInput

    If @Buttonclicked(T_TEXT&)

        Einstellungen

    Endif

    If @Buttonclicked(T_TEXT2&)

        ~KillTimer(%HWND,333)
        Ende%=1
        Freedll DLL&

    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)
    hD% = @Control("Dialog","Einstellungen",$14C80084,%WinLeft+80,%WinTop+155,230,190,%HWND,0,%HINSTANCE,$101)
    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

Proc Sub

    Parameters hWnd&,Message&,wParam&,lParam&

    If Message&=$401

        Inc Timer_Busy%
        Settext T_Text&,"Timer: " + @str$(Timer_Busy%) + " Durchläufe"
        Return ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)

    Else

        Return ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)

    EndIf

ENDPROC


KompilierenMarqueSéparation
DEF @GetDlgCtrlID(1) !"User32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
DEF @GetProcAddress(2) !"KERNEL32","GetProcAddress"
Testprogramm Minuteur
Profan Version 9
 $H Windows.ph
-Main----------------------------------------------------------------
Déclarer Timer_Busy%,Ende%
Déclarer TimerID&,Créer%,T_Text&,Test#,T_TEXT2&
Déclarer OldWndProc&,DLL&,P_A&
LET DLL&=@Usedll("Send.DLL")
Fenêtre Style 26+512
Titre de la fenêtre "Subclassingtest 2"
Fenêtre 100,100 - 370,200
Laisser T_TEXT&=@CREATEButton(%HWND,»,30,80,300,30)
Laisser T_TEXT2&=@CREATEButton(%HWND,"Ende",30,120,300,30)
Waitinput
Set("Fastmode", 1)
OldWndProc& = ~GetWindowLong(%hWnd,~GWL_WNDPROC)
LET P_A&=@GetProcAddress(DLL&,"_timer@16")
~SetWindowLong(%hWnd,~GWL_WNDPROC,@ProcAddr("Sub",4))
Ende%=0
TimerID&=~SetTimer(%HWND,333,25,@ProcAddr("Sub",4))
Imprimer TimerID&

WhileNot Ende%

    WaitInput

    Si @Buttonclicked(T_TEXT&)

        Einstellungen

    Endif

    Si @Buttonclicked(T_TEXT2&)

        ~KillTimer(%HWND,333)
        Ende%=1
        Freedll DLL&

    Endif

Wend

Fin
-Proc Einstellungen

Proc Einstellungen

    Déclarer hD%, hA%, hB%, OK%, hTime%
    Déclarer hF1%, hT1%
    Claire OK%
    Dialogfenster erzeugen
    hD% = @Créer("Dialog",%hWnd,"Einstellungen",%WinLeft+80,%WinTop+155,230,190)
    hD% = @Contrôle("Dialog","Einstellungen",$14C80084,%WinLeft+80,%WinTop+155,230,190,%HWND,0,%HINSTANCE,$101)
    hF1% = @Créer("Font",Arial,16,0,0,0,0)
    hT1% = @Créer("Text",hD%,"Einstellungen...",10,10,220,20)
    SetFont hT1%,hF1%
    hTime% = @Créer("TimeEdit", hD%, "00:00:00", 10, 35, 70, 24)
    hB% = @Créer("Button",hD%,"&Nachstellen",10,120,100,28)
    hA% = @Créer("Button",hD%,"&Abbrechen",120,120,100,28)

    WhileNot Ok%

        WaitInput

        Si @ButtonClicked(hB%)  Nachstellen

            Ok% = 1
            Aktionen ici

        ElseIf @ButtonClicked(hA%) démolir

            Ok% = 1

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

            Ok% = 1

        EndIf

    Endwhile

    DeleteObject hF1%
    @DestroyWindow(hD%)

ENDPROC

Proc Sous

    Paramètres hWnd&,Message&,wParam&,lParam&
    Inc Timer_Busy%
    Settext T_Text&,"Timer: " + @str$(Timer_Busy%) + " Durchläufe"

ENDPROC


KompilierenMarqueSéparation
 $DLL
-Procédure qui dans certain Zeitintervallen ausgefuehrt wird (4x pro seconde)
Déclarer Timer_Busy%,WND&

dllproc Minuteur,4

    Paramètres P1&,P2&,P3&,P4&
    @SendMessage(@FindWindow("Subclassingtest"),$401,0,0)

ENDPROC


qui faute hat alors wohl rien avec Subclassing trop 1faire - ou bien quoi meinst du oui c'est ca?
 
10.09.2006  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

4.294 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie