XProfan Forum Community: Nach Serverausfall, noch geht fast nix, bin dran!

Français
Forum

Erledigt: 2 Sachen gleichzeitig ablaufen laisser

 

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)
 
27.03.2008  
 




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
whileloop 0,10000000

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

endwhi

...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...
 
28.03.2008  
 




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.

1.018 kB
Hochgeladen:28.03.2008
Downloadcounter86
Download
 
28.03.2008  
 




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.
 
28.03.2008  
 




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
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
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épondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

3.054 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie