Español
Foro

Zähler sin Temporizador

 

Jörg
Sellmeyer
¡Hola,

Como podría Soy un Zähler realisieren, el quasi con voller Geschwindigkeit zählt, während mein Hauptprogramm en el Waitinput en una Eingabe wartet?
Mit folgendem pequeño Code es el Zähler. Wenn Yo aber el Ratón bewege rast él los. Diese Geschwindigkeit bräuchte Yo dauernd. Gibt lo una Message, el dauernd übermittelt se? Ein Temporizador es en cada Fall a langsam.
Cls
Declarar Counter%

SubClassProc

    'If SubClassMessage(%hwnd,?)
    Inc Counter%

    If Counter% = 385

        Counter% = 1
        Cls

    EndIf

    'EndIf

ENDPROC

Subclass %hwnd,1
Screen 4000,500

Mientras que 1

    WaitInput
    Título de la ventana Str$(Counter%)

    If IsKey($20)

        DrawText Counter% * 10,40,"!"

    ElseIf IsKey(27)

        Romper

    EndIf

Wend

Subclass %hwnd,0
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
27.09.2011  
 




Nico
Madysa
In XProfan X2 wäre el wohl con Multiprozessing a lösen.

RGH
So sería etwa el oft gefragte Tiempo en el Titelzeile gelöst voluntad:
Proc SetTitleTime

    parámetros handle&
    var ende% = 0

    whilenot ende%

        setText handle&, dt("getdate", 6)
        caso getText$(handle&) = "" : ende% = 1
        sleep 100

    endwhile

ENDPROC

Selección aleatoria
windowstyle 24 + 512
Ventana 100,550-500,200
pExec("|SetTitleTime", %hWnd)
var ende% = 0

whilenot ende%

    waitinput
    caso %key = 2 : ende% = 1

endwhile

end



Ansonsten wären Hilos una solución. Posesiones con XPSE y NProcs algo hingezimmert bekommen, el etwa el macht, qué du willst:
 {$cleq}
Cls

nproc Temporizador

    parámetros addr&

    whilenot Largo(addr&,0) < 0

        Sleep(1)
        Largo addr&,0 = Largo(addr&,0) + 1
        SetText %hWnd,str$(Largo(addr&,0))

        if Largo(addr&,0) >= 385

            Largo addr&,0 = 0
            BitBlt(%hDC,0,0,4000,500,%hDC,0,0,WHITENESS)

        endif

    wend

    ExitThread(0)

ENDPROC

var id& = 0
var exit& = 0
declarar count#
dim count#,4
CreateThread(0,0,ProcAddr(Temporizador,1),count#,0,Addr(id&))
Screen 4000,500

Mientras que 1

    WaitInput
    Título de la ventana Str$(Largo(count#,0))

    If IsKey($20)

        DrawText Largo(count#,0) * 10,40,"!"

    ElseIf IsKey(27)

        Largo count#,0 = -10
        Romper

    EndIf

Wend

if GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE

    whileloop 5

        imprimir "Thread todavía aktiv ..."
        Sleep 100
        casenot GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE : romper

    EndWhile

    caso GetExitCodeThread(id&,Addr(exit&)) = STILL_ACTIVE : TerminateThread(id&,0)

endif

Disponer count#
end

Natürlich son algunos Dummejungenfehler drin, aber zumindest en me funktioniert lo.
Hier el Exe:
Descargar
externer Descargar

1.373 kB
Hochgeladen:27.09.2011
Ladeanzahl26
Descargar
 
27.09.2011  
 



@Jörg: Windows zählt ya siempre z.B. en getTickCount ^ ^ -

si Usted also para Zeitpunkt X el getTickCount merkst entonces kannst siempre por Differenz ermittelt como weit ("im Hintergrund") gezählt wurde.

Jörg Sellmeyer (27.09.11)
Diese Geschwindigkeit bräuchte Yo dauernd. Gibt lo una Message, el dauernd übermittelt se?


Noe -

el Programa wäre sonst auch "immer" busy. ^ ^
 
27.09.2011  
 




RGH
¿Por qué no con un eigenen Prozess:
Declarar hFileMap&, Buffer#, Counter%
Dim Buffer#, 5' Platz para una LongInt + 1 CLS-Flag

Proc Counter

    ' Eigener Prozess, por lo tanto kein globaler Variablenzugriff
    Declarar c_hFileMap&, c_Buffer#, c_Counter%
    Dim c_Buffer#, 5' Platz para una LongInt
    c_hFileMap& = FileMap("Open", "Counter")
    c_Counter% = 0
    ' Speicherdate existiert: los va's con Zählen

    If c_hFileMap&

        c_Buffer# = FileMap("Map", c_hFileMap&)
        Largo c_Buffer#, 0 = c_Counter%
        Byte c_Buffer#, 4 = 0' CLS-Flag en 0

        Mientras que 1

            Sleep 10' Für Testzwecke para mejor Nachvollziehen
            Inc c_Counter%

            If c_Counter% = 385

                c_Counter% = 1
                Byte c_Buffer#, 4 = 1' CLS-Flag en 1

            EndIf

            Largo c_Buffer#, 0 = c_Counter%

        EndWhile

        Disponer c_Buffer#
        FileMap("Close", c_hFileMap&)

    Más

        MessageBox("Speicherdatei podría no geöffnet voluntad!", "MAP-Hinweis", 48)

    EndIf

ENDPROC

CLS
Screen 4000,500
counter% = 0
hFileMap& = Crear("FileMap", "Counter", 4)

If hFileMap&

    Buffer# = FileMap("Map", hFileMap&)

Más

    MessageBox("Speicherdatei podría no erstellt voluntad!", "Hinweis", 48)

EndIf

' Speicherdatei es vorbereitet: Der Prozess Conter kann comenzó voluntad
var hCounter& = PExec("|Counter")

Mientras que 1

    WaitInput
    Counter% = Largo(Buffer#, 0)

    If Byte(Buffer#, 4 = 1)

        CLS
        Byte Buffer#, 4 = 0' CLS-Flag zurücksetzen

    EndIf

    Título de la ventana Str$(Counter%)

    If IsKey($20)

        DrawText Counter% * 10,40,"!"

    ElseIf IsKey(27)

        Romper

    EndIf

EndWhile

' Conter-Prozess final!
process("kill", hCounter&, 0)
Disponer Buffer#
FileMap("Close", hFileMap&)
End

Saludo
Roland

EDIT: Como war alguien más rápido, si auch algo anders ...
 
XProfan X2
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
27.09.2011  
 



RGH (27.09.11)
¿Por qué no con un eigenen Prozess:


El Initialisierung es desafortunadamente muy Systemlastig!
 
27.09.2011  
 




Nico
Madysa
RGH (27.09.11)
¿Por qué no con un eigenen Prozess:


Weil Yo como el Adressen no así simplemente hätte transferencia puede. Yo habe el código sólo fix antes el Mittagessen hingepinselt y quería mich no aún en Filemaps einlesen. Aber así, como du's gemacht hast, geht's natürlich auch.
 
27.09.2011  
 




Jörg
Sellmeyer
Yo hab's me ya pensamiento. Tiempo schaun, qué se como hacer läßt. Tuve gehofft, el ließe se (Dank Wunderwaffe Subclassing) en un Programa erledigen.
Gracias para el Y sugerencias Codes!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.09.2011  
 



Como wäre lo con Opcode a el createThread-API transferencia sodass Usted a uno Speicherstelle siempre una Zählerwert hast?
 
28.09.2011  
 




Jörg
Sellmeyer
Das sagt me nix
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.09.2011  
 



Como rápidamente se porque gezählt voluntad? Yo nehme no a el Usted con 100% CPU-Last "zählen" möchtest por qué Yo el frage. Yo podría entonces z.B. simplemente bisl nativen Opcode en una Zona escribir y el por createThread a Ausführung anweisen.
 
28.09.2011  
 




Jörg
Sellmeyer
Ah sí. Yo glaube, daß con el Zählen funktioniert así ya. Im Moment nervt mich algo Anderes. Melde mich otra vez.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
29.09.2011  
 



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

2.237 Views

Untitledvor 0 min.
Tango14.07.2017
Jörg Sellmeyer03.12.2015
GDL03.09.2015
Peter Max Müller16.05.2015
Más...

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