Italia
Fonte/ Codesnippets

Sichere Subclassproc Threads Timer

 
- Page 1 -


SubClassProc Timer - sichere
KompilierenMarkierenSeparieren
 $H windows.ph
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350)))
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",0,0,$FFFF,$FFFF)
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING()
SUBCLASS HMYWND&,1
~SetClassLongA(HMYWND&,-12,~LoadCursorA(0,32512))
~SetTimer(HMYWND&,55100,100,0)
~SetTimer(HMYWND&,55101,500,0)

WHILE 1

    WAITINPUT

    SELECT %UMESSAGE

        CASEOF $0010

        SELECT %MWND

            CASEOF HMYWND&

            BREAK

        ENDSELECT

    ENDSELECT

ENDWHILE

~KillTimer(HMYWND&,55100)
~KillTimer(HMYWND&,55101)
end

SUBCLASSPROC

    SELECT &SWND

        CASEOF HMYWND&

        SELECT %SMESSAGE

            CASEOF 532,$0005

            MYWND.RESIZING()

            CASEOF $0113

            SELECT &SWPARAM

                CASEOF 55100

                DEMO(1)

                CASEOF 55101

                DEMO(2)

            ENDSELECT

        ENDSELECT

    ENDSELECT

endproc

proc MYWND.RESIZING

    SETWINDOWPOS HSTATBAR&=0,0 - 0,0
    DEMO(1)
    DEMO(2)

endproc

proc DEMO

    PARAMETERS MODE&

    SELECT MODE&

        CASEOF 1

        STARTPAINT HMYWND&
        USEPEN 0,0,RND($FFFFFF)
        LINE 10,10 - 200,43
        ENDPAINT

        CASEOF 2

        STARTPAINT HMYWND&
        TEXTCOLOR RND($FFFFFF),~GetSysColor(15)
        DRAWTEXT 10,10,&GETTICKCOUNT
        ENDPAINT

    ENDSELECT

endproc


KompilierenMarkierenSeparieren

458 kB
Hochgeladen:30.08.2008
Downloadcounter163
Download
 
30.08.2008  
 



 
- Page 1 -


Nö, ist völlig korrekt mit XPSE.

Fenster soll auf 0 erstellt werden (oberste Ebene) damit es auch sicher in der Tastkbar landet - und der Parameter zwischen ,, kann nur 0 sein. Das klappt aber nur hinter Klammern und zwischen Kommas...

XPSE übersetzt es doch auch korrekt, oder?

Du kannst mit XPSE schreiben:
KompilierenMarkierenSeparieren
und die ausgekommaten 4 Parameter sind halt 0... (sichert aber auch nur, das - wenn in der Zielfunktion keine pCount-Prüfung eingebaut ist - die übergebenen Parameter auch wirklich 0 sind)
 
31.08.2008  
 



Frank Abbing
Was genau soll der Code demonstrieren?


Damit kann man sicheres threadähnliches Verhalten Programmieren, bzw. ist es hierfür eine Vereinfachung.

Blockierende Apis können damit naturalmente nicht überrumpelt werden.
 
31.08.2008  
 




Jörg
Sellmeyer
Wenn Io l' zweien Code als prf-File per Drag & Drop auf XPSE ziehe erhalte ich diesen Code:
KompilierenMarkierenSeparieren
proc __xpse__endofprogram__

    REM {{SOMEEXTRAENDCOMMAND}}
    end

endproc

DECLARE __cf1&,__cf2&,__cf3&,__cf4&,__cf5&
Def __cf1(2) !"KERNEL32","GetProcAddress"
Def __cf2(1) !"KERNEL32","GetModuleHandleA"
__cf1&=__cf1(__cf2("user32.dll"),"SetClassLongA")
__cf2&=__cf1(__cf2("user32.dll"),"LoadCursorA")
__cf3&=__cf1(__cf2("user32.dll"),"SetTimer")
__cf4&=__cf1(__cf2("user32.dll"),"KillTimer")
__cf5&=__cf1(__cf2("user32.dll"),"GetSysColor")
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
var HMYWND&=(CREATE("WINDOW",(),"Zuckertest 3.0",(100),(100),(200),(350)))
!!!!!
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",,,$FFFF,$FFFF)
!!!!!
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING()
call(__cf1&,HMYWND&,-12,call(__cf2&,,32512))
SUBCLASS HMYWND&,1
call(__cf3&,HMYWND&,55100,100,)
call(__cf3&,HMYWND&,55101,500,)

WHILE 1

    WAITINPUT

    SELECT %UMESSAGE

        CASEOF $0010

        SELECT %MWND

            CASEOF HMYWND&

            BREAK

        ENDSELECT

    ENDSELECT

ENDWHILE

call(__cf4&,HMYWND&,55100)
call(__cf4&,HMYWND&,55101)
__xpse__endofprogram__

proc SUBCLASSPROC

    SELECT SWND

        CASEOF HMYWND&

        SELECT SMESSAGE

            CASEOF 532,$0005

            MYWND.RESIZING()

            CASEOF $0113

            SELECT SWPARAM

                CASEOF 55100

                DEMO(1)

                CASEOF 55101

                DEMO(2)

            ENDSELECT

        ENDSELECT

    ENDSELECT

endproc

proc MYWND.RESIZING

    SETWINDOWPOS HSTATBAR&=0,0 - 0,0
    DEMO(1)
    DEMO(2)

endproc

proc DEMO

    PARAMETERS MODE&

    SELECT MODE&

        CASEOF 1

        STARTPAINT HMYWND&
        USEPEN 0,,RND($FFFFFF)
        !!!!!
        LINE 10,10 - 200,43
        ENDPAINT

        CASEOF 2

        STARTPAINT HMYWND&
        TEXTCOLOR RND($FFFFFF),call(__cf5&,15)
        DRAWTEXT 10,10,&GETTICKCOUNT
        ENDPAINT

    ENDSELECT

endproc

__xpse__endofprogram__
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



Ähä, der neuste XPSE (aber hierbei auch schon ein XPSE der deutlich älter sein kann) gibt aber folgenden Code
KompilierenMarkierenSeparieren
proc __xpse__endofprogram__

    PARAMETERS exitcode&
    REM {{SOMEEXTRAENDCOMMAND}}
    case %pcount=1 : end exitcode&
    end

endproc

DECLARE __cf1&,__cf2&,__cf3&,__cf4&,__cf5&
Def __cf1(2) !"KERNEL32","GetProcAddress"
Def __cf2(1) !"KERNEL32","GetModuleHandleA"
__cf1&=__cf1(__cf2("user32.dll"),"SetClassLongA")
__cf2&=__cf1(__cf2("user32.dll"),"LoadCursorA")
__cf3&=__cf1(__cf2("user32.dll"),"SetTimer")
__cf4&=__cf1(__cf2("user32.dll"),"KillTimer")
__cf5&=__cf1(__cf2("user32.dll"),"GetSysColor")
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
!!!!!
var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350)))
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",0,0,$FFFF,$FFFF)
!!!!!
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING(an class=s2>)
...
Im Moment tippe ich noch darauf das Du vlt. einen doch schon in die Monate gekommenen XPSE benutzt!??
 
31.08.2008  
 



 
- Page 2 -



Jörg
Sellmeyer
Im Moment bekomme ich das zu sehen, wenn ich XPSE starte:



Gestern runtergeladen.

[offtopic]Das Feature mit dem Dateibrowser, wenn ich in das Feld "Datei an Beitrag anhängen" klicke, ist ja ganz nett. Jetzt kann ich aber nix mehr per Tasttatur oder Strg + V eingeben. [/offtopic]

30 kB
Hochgeladen:31.08.2008
Downloadcounter225
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



Der Dialog ist auch normal - kommt bei jeder (zunächst fremden) File wenn das Windows-Dateisystem die File nicht als "eigene" erkennt - hat mit xpse selbst aber nichts zu tun. Die XPSE-Version bekommst Du heraus wenn Du XPSE einfach mal mit Programm, oder im CMD startest.

[offtopic]
Jörg Sellmeyer
Das Feature mit dem Dateibrowser, wenn ich in das Feld "Datei an Beitrag anhängen" klicke, ist ja ganz nett. Jetzt kann ich aber nix mehr per Tasttatur oder Strg + V eingeben.


Das ist keine meiner Erfindungen sondern eine des FireFox - da habe ich keinen Einfluss drauf.

FireFox "tut jetzt so" um es Angriffen - wie z.B. unerwünschtes Hochladen durch "scripts" - schwieriger zu machen.

Ich find auch schade das damit z.B. ein Strg+V nur noch geht circa "Durchsuchen" -> Strg+V -> {enter}

[/offtopic]
 
31.08.2008  
 




Jörg
Sellmeyer
Wenn XProfan das hier kennt: var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350))) ,dann ist das auf jeden Fall an mir vorbeigegangen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



NULL als Parent-Handle hat imho nichts mit XProfan zu tun, und naturalmente weiss Windows genau was ich damit meine und reagiert auch korrekt indem es das Fenster auf 0 (root) erstellt. Was Spricht gegen NULL als Fensterparent?
 
31.08.2008  
 




Jörg
Sellmeyer
Ah, wenn das so ist. Meine XPSE-Version war tatsächlich etwas veraltet.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.08.2008  
 



Besonders bei XPSE kann ich nur immer wieder anmerken das wirklich kein Update übergangen werden sollte...
 
31.08.2008  
 




Stefan
M.
Caillet
Hallo iF,
wenn du das jetzt auch noch so hinbekommst, dass es auch ausserhalb des waitinputs corre, hast du den Ersatz per die MSX-Interval Inc.
Gruss Stefan
 
Ich habe grosses Glück, weil ich Mitmenschen helfen darf.
Entwicklungsumgebung:
XProfan11 , Win XP Pro 32Bit , Win XP Home ,Win7 HomePremium 64Bit
PC: P4/3GHz , 2GB RAM , 1700GB HD
Laptop: Intel Core 2 Duo /2,2GHz , 4GB RAM , 500GB HD
13.11.2008  
 



Schau mal, noch einfacher als die msx-interval.inc ist die thread-unit [...]  , beide setzen auf die settimer-api auf.

Im Unterschied nur zur msx-interval.inc ist die thread-unit bestückt mit etwas Sicherheit und Bedienungsanleitung verteilt circa Threads, aber auch diese beiden Dinge können die Absturzgefahr nur vermindern.

ProcAddr ist momentan per Enumerationsapis vorgesehen. Es per setTimer zu verwenden, und auch noch ausserhalb des Waitinput, kann immer crashen, solange XProfan das (noch) nicht explizit handhaben kann.

Schau, selbst Rolands Implementation des SubClassings funktioniert nur im WaitInput.

Irgendwann wird Roland da ran müssen.
 
13.11.2008  
 




Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

11.477 Views

Untitledvor 0 min.
Walter30.12.2022
RudiB.16.02.2022
Tango06.08.2021
Jörg Sellmeyer16.06.2020
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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