Foro | | | | 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) |
| | | | |
| | 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 ...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... |
| | | | |
| | 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. |
| | | | |
| | 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. |
| | | | |
| | 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 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 ▲ |
| |
|
RespuestaThemeninformationenDieses Thema ha 5 subscriber: |