Deutsch
Quelltexte/ Codesnippets

Sichere Subclassproc Threads Timer

 
- Seite 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
Ladeanzahl163
Herunterladen
 
30.08.2008  
 



 
- Seite 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 natürlich nicht überrumpelt werden.
 
31.08.2008  
 




Jörg
Sellmeyer
Wenn ich den zweien Code als prf-Datei 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()
...
Im Moment tippe ich noch darauf das Du vlt. einen doch schon in die Monate gekommenen XPSE benutzt!??
 
31.08.2008  
 



 
- Seite 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
Ladeanzahl225
Herunterladen
 
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) Datei wenn das Windows-Dateisystem die Datei 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 über "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 natürlich 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 läuft, hast du den Ersatz für 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 über Threads, aber auch diese beiden Dinge können die Absturzgefahr nur vermindern.

ProcAddr ist momentan für Enumerationsapis vorgesehen. Es für 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


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

11.340 Betrachtungen

Unbenanntvor 0 min.
Walter30.12.2022
RudiB.16.02.2022
Tango06.08.2021
Jörg Sellmeyer16.06.2020
Mehr...

Themeninformationen



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