Forum | | | |  Jac de Lad | Hm, je sais gar pas, wohin je anfangen soll...
mon Problem ist folgendes: j'ai un Programme, dass près de dem normalen le bout aussi qui ganze Zeit (einmal pro seconde aktualisiert) qui l'heure et den Speicherverbrauch dans qui Statusbar Montrer soll. je habs bisher avec qui Fil.pcu gemacht. mais iF rät en ab, zurecht. Gaaaaanz selten venez es avant, dass beim finissons trop einer Fehlermeldung venez, weil qui benötigte Bereichsvariable plus rapide disposed wird comme qui Fil finissez wird (oui c'est ca dit wird chacun seconde une annonce erzeugt, qui ensuite den Bilschirm füllen).
So, eh bien hat qui iF dit, dass qui PCU überflüssig ist, là es oui dans XProfan 11 Subclassing gibt. et il hat sich aussi alle Mühe gegeben mir cela trop expliquer, mais je habs pas verstanden. c'est pourquoi fois le Frage: Hat quelqu'un peut-être un Beispiel pour un Programme, cela entweder im Waitinput steckt (zum Beispiel un anklickbarer Button) et sur 2 Funktionen irgendwas ausgibt ou bien une autre?
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 ▲ |
| |
| |  | je crois qui Test4.Prf aus dem ProgressControl-paquet tut quelque chose comme...
Nachtrag: 2 Sachen gleichzeitig ablaufen laisser si Du cela ernst meinst ensuite besoin Du une 2. Prozess là imho threads dans XProfan sonst seulement wieder procaddr-Probleme aufwerfen. (si überhaupt possible) |
| | | | |
| |  Andreas Miethe
 | KompilierenMarqueSéparation#############################
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 J'ai eu mir cela aussi gedacht. Stell dir avant, dass qui Button quoi x-beliebiges pouvoir comment... KompilierenMarqueSéparation ...so klappt es pas.  |
| | | 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 déjà...
Du wirst dans Deinem Boucle aussi UpdateStatus(&sWnd) appel doit!
Baue Dir une helferProc quelle updateStatus seulement aufruft si z.B. 200 Millisekunden passé sommes... |
| | | | |
| |  Jac de Lad | je versteh seulement pas, pourquoi qui Fil.pcu cela automatisch pouvoir et es aucun autre Possibilité pour gitb. Jedenfalls aucun, qui funktioniert et qui je comprends. |
| | | 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
 | cela wird aussi pas wirklich aider! Wird oui seulement qui Statusbar upgedatet. qui reste des Programms hängt dans qui Boucle, solange vous pas abgelaufen ist. cela hilft seulement un fil wriklich plus.
je mach là la fois un Beispiel fertig ! Hab là déjà une concept im Hinterkopf comment on cela anstellen pourrait. sans Callbacks et 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 im 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 ▲ |
| |
| |  | non einfacher - je prends Deinen Code pour un Beispiel: KompilierenMarqueSéparation#############################
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 comment Jac es wünscht et ist Ressourcen/Aufwand-sparender et gezielter einsetzbar comme un 2. (künstlicher) Fil qui pour so quelque chose garnicht wirklich nötig ist.  |
 | | | | |
| |  Jac de Lad | @iF: pourquoi verstehst du cela car pas? je connais qui Solution bereits, on a déjà zigmal par-dessus geredet. mais je dachte à quelque chose sans IntervalProc, so comme qui Fil.pcu momentan pouvoir... |
| | | 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 ▲ |
| |
| |  | et oui c'est ca c'est qui Punkt wohin je genaustens Verstehe quoi Du volontiers hättest, je es mais pas schaffe Dir trop expliquer cela es im Ergebnis cela Selbe ist avec dem Vorteil: Gezielter einsetzbar et ressourcenschonender et avant allem: sûrement. c'est sozusagen une Frage des Ablaufverständnisses - je wüsste pas comment je es encore anders verständlich faire peux.  |
| | | | |
| |  Andreas Miethe
 | IntervalProc kam trop spät 
déjà fertig avec dem Beispiel.
Erklärung en supplément. Es volonté 2 Datein nécessaire, Einmal cela eigentliche Programme, zum anderen cela quoi den Boucle contient. qui Boucle-Programme muss kompiliert son. cela Hauptprogramm startet sich simple selber avec Parametern (Boucle-Programme) récente. cela Ganze funktioniert seulement si beide Programme kompiliert sommes !
Ist peut-être encore verbesserungswürdig, funktioniert mais erstmal !
Boucle-Programme ( comme timer.prf Sauver et kompilieren ) KompilierenMarqueSéparation Hauptprogramm KompilierenMarqueSéparation#########################################
Fil starten, pausieren laisser, finissons
Andreas Miethe 28.03.2008
#########################################
BEACHTE : starten comme EXE ou bien 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)
Déclarer ProcessHandle&,Processhandle1&
Déclarer ThreadHandle&,Threadhandle1&
Proc CreateThread
Paramètres Param$
Déclarer StartupInfo#,CommandString$,ProcessInfo#
Déclarer Retval&,Processhandle&,ThreadHandle&
CommandString$ = Par$(0) + + Param$
Faible StartupInfo#,StartupInfo
Claire StartupInfo#
StartupInfo#.cb& = SizeOf(StartupInfo#)
Faible ProcessInfo#,ProcessInfo
Claire ProcessInfo#
~CreateProcess(0,Addr(CommandString$),0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
ProcessHandle& = ProcessInfo#.hProcess&
ThreadHandle& = ProcessInfo#.hThread&
Dispose StartupInfo#
Dispose ProcessInfo#
Retour Str$(ProcessHandle&)+,+Str$(ThreadHandle&)
ENDPROC
Proc TerminateThread
Paramètres ProcessHandle&
Déclarer ExitCode&
~GetExitCodeProcess(Processhandle&,Addr(ExitCode&))
~TerminateProcess(Processhandle&,ExitCode&)
ENDPROC
Proc PauseThread
Paramètres Threadhandle&
~SuspendThread(Threadhandle&)
ENDPROC
Proc ResumeThread
Paramètres Threadhandle&
~ResumeThread(Threadhandle&)
ENDPROC
Var Handles$ =
Var Start& = Créer(Button,%hwnd,Start,10,10,80,24)
Var Pause& = Créer(Button,%hwnd,récréation,10,40,80,24)
Var Resume& = Créer(Button,%hwnd,continuer,10,70,80,24)
Var Terminate& = Créer(Button,%hwnd,Ende,10,100,80,24)
Var Empfang& = Créer(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& = Créer(StatusWindow,%hwnd,)
UpdateStatus(Statusbar&)
SubClass StatusBar&,1SubClassing einschalten
~SetTimer(StatusBar&,1,1000,0)Minuteur à qui Statusbar hängen
SubClass %hwnd,1SubClassing einschalten
Utilisateur Messages ~wm_close
WhileNot Ende&
Waitinput
Si Clicked(Start&)
qui Exe startet sich selber encore einmal avec Parametern
qui paramètre, qui ici erwartet wird ist un un Kompilat ( PRC-Dossier )
Handles$ = CreateThread(Minuteur.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
Si %Umessage = ~wm_close
si TerminateThread() pas chez Programmende aufgerufen wird,
fonctionne cela 2.Programme plus !
TerminateThread(ProcessHandle1&)
Ende& = 1
Endif
Endwhile
SubClass StatusBar&,0
SubClass %hwnd,0
end
Proc UpdateStatus
Paramètres Statusbar&
Déclarer MemStatus#
Faible Memstatus#,MEMORYSTATUS
MemStatus#.dwLength& = SizeOf(MemStatus#)
~GlobalMemoryStatus(MemStatus#)
SetText Statusbar&,maintenant : +Time $(0)+:+Left $(Time $(1),2)+ - Speicherverbrauch : +Str$(MemStatus#.dwMemoryLoad&)+%
Dispose MemStatus#
ENDPROC
SubClassProc
Si 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 ▲ |
| |
|
répondreOptions du sujet | 3.067 Views |
Themeninformationencet Thema hat 5 participant: |