Español
Foro

Hecho: 2 Sachen gleichzeitig ablaufen dejar

 

Jac
de
Lad
Hm, Yo weiß nada, wo Yo anfangen se...

Mein Problema es folgendes: Yo habe una Programa, dass neben el normalen Ablauf auch el todo Tiempo (una vez pro Sekunde aktualisiert) el Uhrzeit y el Speicherverbrauch en el Statusbar Mostrar se. Yo habs bisher con el Hilo.pcu gemacht. Aber IF rät su de, zurecht. Gaaaaanz selten kommt lo antes, dass beim Beenden a uno Fehlermeldung kommt, porque el benötigte Bereichsvariable más rápido disposed se como el Hilo termina (genau dijo se jede Sekunde una Meldung producido, el entonces el Bilschirm füllen).

So, nun ha el IF dijo, dass el PCU überflüssig es, como lo sí en XProfan 11 Subclassing son. Und él ha se auch todos Mühe gegeben me a erklären, pero yo habs no verstanden. Deshalb veces el Cuestión: Sombrero alguien tal vez una Ejemplo para una Programa, el entweder en el Waitinput steckt (para Ejemplo una anklickbarer Button) y encima 2 Características algo ausgibt oder una otro?

Jac
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
27.03.2008  
 



Yo glaube el Test4.Prf de el ProgressControl-Paket tut algo como...

Apéndice: 2 Sachen gleichzeitig ablaufen dejar si el ernst media entonces necesidad Usted una 2. Prozess como imho threads en XProfan sonst sólo otra vez procaddr-Problemas aufwerfen. (si überhaupt posible)
 
27.03.2008  
 




Andreas
Miethe



KompilierenMarcaSeparación
#############################
XProfan11 RC2 Beispiel
Andreas Miethe, 28.03.2008
#############################
 $H Windows.ph
 $H Messages.ph
 $H Structs.ph
Struct MEMORYSTATUS = ~MEMORYSTATUS
Var Ende& = 0
CLS ~GetSysColor(~COLOR_BTNFACE)
SubClass %hwnd,1 SubClassing einschalten
Var Statusbar& = Create(StatusWindow,%hwnd,)
UpdateStatus(Statusbar&)
SubClass StatusBar&,1 SubClassing einschalten
~SetTimer(StatusBar&,1,1000,0)Timer an die Statusbar hängen
Var Button& = Create(Button,%hwnd,Warte auf Aktion,10,10,120,24)
SendMessage(Button&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
##########################################

Whilenot Ende&

    Waitinput

    If Clicked(Button&)

        ~KillTimer(StatusBar&,1)
        Ende& = 1

    Endif

EndWhile

SubClass StatusBar&,0
SubClass %hwnd,0
End
##########################################

Proc UpdateStatus

    Parameters Statusbar&
    Declare MemStatus#
    Dim Memstatus#,MEMORYSTATUS
    MemStatus#.dwLength& = SizeOf(MemStatus#)
    ~GlobalMemoryStatus(MemStatus#)
    SetText Statusbar&,Jetzt : +Time$(0)+:+Left$(Time$(1),2)+  -  Speicherverbrauch : +Str$(MemStatus#.dwMemoryLoad&)+%
    Dispose MemStatus#

EndProc

SubClassProc

    If SubClassMessage(%hwnd, ~WM_SIZE)

        SetWindowPos Statusbar& = 0,0-0,0

    ElseIf SubClassMessage(Statusbar&, ~WM_TIMER)

        UpdateStatus(&sWnd)

    Endif

../../funktionsreferenzen/XProfan/ENDPROC/'>ENDPROC

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
28.03.2008  
 




Jac
de
Lad
@Andreas: So Tuve me auch pensamiento. Stell dir antes, dass el Button qué x-beliebiges macht como...
KompilierenMarcaSeparación
whileloop 0,10000000

    SetTExt button&,Str$(&Loop)
    Sleep 10

endwhi

...así klappt no.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
28.03.2008  
 



Hatten wir doch ya...

Usted wirst en Deinem Loop auch UpdateStatus(&sWnd) aufrufen necesario!

Baue Usted una helferProc welche updateStatus sólo aufruft si z.B. 200 Millisekunden vergangen son...
 
28.03.2008  
 




Jac
de
Lad
Yo versteh sólo no, por qué el Hilo.pcu el automáticamente macht y lo no otro Möglichkeit dafür gitb. Jedenfalls no, el funktioniert y el Yo verstehe.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
28.03.2008  
 




Andreas
Miethe


Das se auch no wirklich helfen! Wird sí sólo el Statusbar upgedatet.
Der Rest des Programms hängt en el Bucle, solange ellos no abgelaufen es.
Das hilft sólo un hilo wriklich más.

Yo mach como veces una Ejemplo fertig !
Hab como ya una Concepto en el Hinterkopf cómo hacerlo anstellen podría. Ohne Callbacks y ProcAddr !
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
28.03.2008  
 




Jac
de
Lad
Vielen Dank en el Voraus.
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
28.03.2008  
 



Nein einfacher - Yo nehme Su código para una Ejemplo:
KompilierenMarcaSeparación
#############################
XProfan11 RC2 Beispiel
Andreas Miethe, 28.03.2008
#############################
 $H Windows.ph
 $H Messages.ph
 $H Structs.ph
Struct MEMORYSTATUS = ~MEMORYSTATUS
Var intervalProcData&=&getTickCount
Var Ende& = 0
CLS ~GetSysColor(~COLOR_BTNFACE)
SubClass %hwnd,1SubClassing einschalten
Var Statusbar& = Create(StatusWindow,%hwnd,)
SubClass StatusBar&,1SubClassing einschalten
~SetTimer(StatusBar&,1,1000,0)Timer an die Statusbar hängen
Var Button& = Create(Button,%hwnd,Warte auf Aktion,10,10,120,24)
SendMessage(Button&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
##########################################

Whilenot Ende&

    Waitinput

    If Clicked(Button&)

        EnableWindow Button&,0

        WhileLoop 20000 heidy, ein könnte länger dauern loop?

            intervalProc()drum hier auch?! im Programm verteilen wo nötig!
            SetText Button&,str$(&getTickCount)
            ...

        EndWhile

        EnableWindow Button&,1
        ~KillTimer(StatusBar&,1)
        Ende& = 1

    Endif

EndWhile

SubClass StatusBar&,0
SubClass %hwnd,0
End
##########################################

Proc UpdateStatus

    Parameters Statusbar&
    Declare MemStatus#
    Dim Memstatus#,MEMORYSTATUS
    MemStatus#.dwLength& = SizeOf(MemStatus#)
    ~GlobalMemoryStatus(MemStatus#)
    SetText Statusbar&,Jetzt : +Time$(0)+:+Left$(Time$(1),2)+  -  Speicherverbrauch : +Str$(MemStatus#.dwMemoryLoad&)+%
    Dispose MemStatus#

EndProc

SubClassProc

    If SubClassMessage(%hwnd, ~WM_SIZE)

        SetWindowPos Statusbar& = 0,0-0,0

    ElseIf SubClassMessage(Statusbar&, ~WM_TIMER)

        intervalProc()

    Endif

EndProc

Proc intervalProc

    if intervalProcData&<&getTickCount

        intervalProcData&=intervalProcData&+200 MILLISEKUNDEN
        hier würd getüddelt
        UpdateStatus(%hWnd)
        UpdateStatus(StatusBar&)

    E
a> ENDPROC

Reagiert como Jac lo wünscht y es Ressourcen/Aufwand-sparender y gezielter einsetzbar como una 2. (künstlicher) Hilo el para así algo garnicht wirklich nötig es.

1.018 kB
Hochgeladen:28.03.2008
Ladeanzahl83
Descargar
 
28.03.2008  
 




Jac
de
Lad
@IF: ¿Por qué verstehst Si es usted el porque no? Yo saber el Solución ya, wir haben ya zigmal darüber geredet. Aber Yo pensamiento a algo sin IntervalProc, ya que el Hilo.pcu momentan macht...
 
Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE)
Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP
28.03.2008  
 



Und genau el es el Punkt wo Yo genaustens Verstehe qué Usted gerne hättest, Yo pero no schaffe Usted a erklären el lo en el Ergebnis el Selbe es con el Vorteil: Gezielter einsetzbar y ressourcenschonender y antes allem: sicher. Es sozusagen una Cuestión des Ablaufverständnisses - Yo saber no Yo lo todavía anders verständlich hacer kann.
 
28.03.2008  
 




Andreas
Miethe


IntervalProc kam a spät

Schon fertig con el Ejemplo.

Erklärung dazu. Lo voluntad 2 Datein benötigt, Einmal el eigentliche Programa, para otro el qué el Loop enthält.
Der Loop-Programa muss kompiliert ser.
Das Hauptprogramm startet se simplemente selber con Parametern (Loop-Programa) neu. Das Ganze funktioniert sólo si beide Programas kompiliert son !

Ist tal vez todavía verbesserungswürdig, funktioniert aber primero !

Loop-Programa ( como timer.prf speichern y kompilieren )
KompilierenMarcaSeparación
Als Timer.prf speichern und kompilieren !
 $H windows.ph

If %parCount > 0

    Declare WND&
    Var X& = 0
    WND& = Val(Par$(2))

    whileloop 0,1000000

        If X& = 0

            UseCursor 0
            X& = 1

        Endif

        ~InvalidateRect(wnd&,0,0)
        SetText Wnd&,Str$(&Loop)
        Sleep 10

    endwhile

Endif


Hauptprogramm
KompilierenMarcaSeparación
#########################################
Hilo starten, pausieren dejar, final
Andreas Miethe 28.03.2008
#########################################
BEACHTE : starten como EXE oder STRG+F8
#########################################
 $IFDEF Compiler
 $H Windows.ph
 $H Structs.ph
 $H Messages.ph
Struct StartupInfo = ~STARTUPINFO
Struct ProcessInfo = ~PROCESS_INFORMATION
Struct MEMORYSTATUS = ~MEMORYSTATUS
Var Ende& = 0
cls ~GetSysColor(~COLOR_BTNFACE)
Declarar ProcessHandle&,Processhandle1&
Declarar ThreadHandle&,Threadhandle1&

Proc CreateThread

    Parámetros Param$
    Declarar StartupInfo#,CommandString$,ProcessInfo#
    Declarar Retval&,Processhandle&,ThreadHandle&
    CommandString$ = Par$(0) +   + Param$
    Dim StartupInfo#,StartupInfo
    Claro StartupInfo#
    StartupInfo#.cb& = SizeOf(StartupInfo#)
    Dim ProcessInfo#,ProcessInfo
    Claro ProcessInfo#
    ~CreateProcess(0,Addr(CommandString$),0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
    ProcessHandle& = ProcessInfo#.hProcess&
    ThreadHandle&  = ProcessInfo#.hThread&
    Disponer StartupInfo#
    Disponer ProcessInfo#
    Volver Str$(ProcessHandle&)+,+Str$(ThreadHandle&)

ENDPROC

Proc TerminateThread

    Parámetros ProcessHandle&
    Declarar ExitCode&
    ~GetExitCodeProcess(Processhandle&,Addr(ExitCode&))
    ~TerminateProcess(Processhandle&,ExitCode&)

ENDPROC

Proc PauseThread

    Parámetros Threadhandle&
    ~SuspendThread(Threadhandle&)

ENDPROC

Proc ResumeThread

    Parámetros Threadhandle&
    ~ResumeThread(Threadhandle&)

ENDPROC

Var Handles$ =
Var Start& = Crear(Button,%hwnd,Start,10,10,80,24)
Var Pause& = Crear(Button,%hwnd,Pause,10,40,80,24)
Var Resume& = Crear(Button,%hwnd,Fortsetzen,10,70,80,24)
Var Terminate& = Crear(Button,%hwnd,Ende,10,100,80,24)
Var Empfang& = Crear(TEXT,%hwnd,,10,130,80,24)
SendMessage(Start&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
SendMessage(Pause&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
SendMessage(Resume&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
SendMessage(Terminate&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
SendMessage(Empfang&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
EnableWindow Pause&,0
EnableWindow Resume&,0
EnableWindow Terminate&,0
Var Statusbar& = Crear(StatusWindow,%hwnd,)
UpdateStatus(Statusbar&)
SubClass StatusBar&,1SubClassing einschalten
~SetTimer(StatusBar&,1,1000,0)Temporizador a el Statusbar hängen
SubClass %hwnd,1SubClassing einschalten
Mensajes del usuario ~wm_close

Sinestar encargado Ende&

    Waitinput

    If Clicked(Start&)

        El Exe startet se selber todavía una vez con Parametern
        el Parámetro, el hier esperado se es una una Kompilat ( PRC-Expediente )
        Handles$ = CreateThread(Temporizador.prc +str$(Empfang&))
        ProcessHandle1& = Val(Substr$(Handles$,1,,))
        ThreadHandle1& = Val(Substr$(Handles$,2,,))
        EnableWindow Pause&,1
        EnableWindow Terminate&,1
        EnableWindow Start&,0

    Elseif Clicked(Pause&)

        PauseThread(ThreadHandle1&)
        EnableWindow Pause&,0
        EnableWindow Resume&,1

    ElseIf Clicked(Resume&)

        ResumeThread(ThreadHandle1&)
        EnableWindow Pause&,1
        EnableWindow Resume&,0

    ElseIf Clicked(Terminate&)

        EnableWindow Pause&,0
        EnableWindow Resume&,0
        EnableWindow Terminate&,0
        EnableWindow Start&,1
        TerminateThread(ProcessHandle1&)

    Endif

    If %Umessage = ~wm_close

        si TerminateThread() no en Programmende aufgerufen se,
        se ejecuta el 2.Programa más !
        TerminateThread(ProcessHandle1&)
        Ende& = 1

    Endif

EndWhile

SubClass StatusBar&,0
SubClass %hwnd,0
end

Proc UpdateStatus

    Parámetros Statusbar&
    Declarar MemStatus#
    Dim Memstatus#,MEMORYSTATUS
    MemStatus#.dwLength& = SizeOf(MemStatus#)
    ~GlobalMemoryStatus(MemStatus#)
    SetText Statusbar&,Jetzt : +Time$(0)+:+Left$(Time$(1),2)+  -  Speicherverbrauch : +Str$(MemStatus#.dwMemoryLoad&)+%
    Disponer MemStatus#

ENDPROC

SubClassProc

    If SubClassMessage(%hwnd, ~WM_SIZE)

        SetWindowPos Statusbar& = 0,0-0,0

    ElseIf SubClassMessage(Statusbar&, ~WM_TIMER)

        UpdateStatus(&sWnd)

    Endif

ENDPROC

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
28.03.2008  
 




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.291 Views

Untitledvor 0 min.
Tango14.07.2017
Ernst02.03.2015
iF19.05.2013
Juergen Baier15.02.2012

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