Italia
Foro

Erledigt: 2 Sachen gleichzeitig ablaufen lassen

 
- Page 1 -



Jac
de
Lad
Hm, ich weiß gar nicht, wo ich anfangen soll...

Mein Problem ist folgendes: Ich habe ein Programm, dass neben dem normalen Ablauf auch die ganze Zeit (einmal pro Sekunde aktualisiert) die Uhrzeit und den Speicherverbrauch in der Statusbar Mostra soll. Ich habs bisher mit der Thread.pcu gemacht. Aber iF rät davon ab, zurecht. Gaaaaanz selten kommt es vor, dass beim Beenden zu einer Fehlermeldung kommt, weil die benötigte Bereichsvariable schneller disposed wird als der Thread beendet wird (genau gesagt wird jede Sekunde eine Meldung erzeugt, die dann den Bilschirm füllen).

So, nun hat der iF gesagt, dass die PCU überflüssig ist, da es ja in XProfan 11 Subclassing gibt. Und er hat sich auch alle Mühe gegeben mir das zu erklären, aber ich habs nicht verstanden. Deshalb mal die Frage: Hat jemand vielleicht ein Beispiel per ein Programm, das entweder im Waitinput steckt (zum Beispiel ein anklickbarer Button) und circa 2 Funktionen irgendwas ausgibt oder eine andere?

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  
 



 
- Page 1 -



Andreas
Miethe


IntervalProc kam zu spät

Schon fertig mit dem Beispiel.

Erklärung dazu. Es werden 2 Datein necessario, Einmal das eigentliche Programm, zum anderen das was den Loop enthält.
Der Loop-Programm muss kompiliert sein.
Das Hauptprogramm startet sich einfach selber mit Parametern (Loop-Programm) neu. Das Ganze funktioniert nur wenn beide Programme kompiliert sind !

Ist vielleicht noch verbesserungswürdig, funktioniert aber erstmal !

Loop-Programm ( als timer.prf speichern und kompilieren )
KompilierenMarkierenSeparieren
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
KompilierenMarkierenSeparieren
#########################################
Thread starten, pausieren lassen, beenden
Andreas Miethe 28.03.2008
#########################################
BEACHTE : starten als 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)
Declare ProcessHandle&,Processhandle1&
Declare ThreadHandle&,Threadhandle1&

Proc CreateThread

    Parameters Param$
    Declare StartupInfo#,CommandString$,ProcessInfo#
    Declare Retval&,Processhandle&,ThreadHandle&
    CommandString$ = Par$(0) +   + Param$
    Dim StartupInfo#,StartupInfo
    Clear StartupInfo#
    StartupInfo#.cb& = SizeOf(StartupInfo#)
    Dim ProcessInfo#,ProcessInfo
    Clear ProcessInfo#
    ~CreateProcess(0,Addr(CommandString$),0,0,0,0,0,0,StartupInfo#,ProcessInfo#)
    ProcessHandle& = ProcessInfo#.hProcess&
    ThreadHandle&  = ProcessInfo#.hThread&
    Dispose StartupInfo#
    Dispose ProcessInfo#
    Return Str$(ProcessHandle&)+,+Str$(ThreadHandle&)

EndProc

Proc TerminateThread

    Parameters ProcessHandle&
    Declare ExitCode&
    ~GetExitCodeProcess(Processhandle&,Addr(ExitCode&))
    ~TerminateProcess(Processhandle&,ExitCode&)

EndProc

Proc PauseThread

    Parameters Threadhandle&
    ~SuspendThread(Threadhandle&)

EndProc

Proc ResumeThread

    Parameters Threadhandle&
    ~ResumeThread(Threadhandle&)

EndProc

Var Handles$ =
Var Start& = Create(Button,%hwnd,Start,10,10,80,24)
Var Pause& = Create(Button,%hwnd,Pause,10,40,80,24)
Var Resume& = Create(Button,%hwnd,Fortsetzen,10,70,80,24)
Var Terminate& = Create(Button,%hwnd,Ende,10,100,80,24)
Var Empfang& = Create(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& = Create(StatusWindow,%hwnd,)
UpdateStatus(Statusbar&)
SubClass StatusBar&,1SubClassing einschalten
~SetTimer(StatusBar&,1,1000,0)Timer an die Statusbar hängen
SubClass %hwnd,1SubClassing einschalten
UserMessages ~wm_close

WhileNot Ende&

    Waitinput

    If Clicked(Start&)

        Die Exe startet sich selber noch einmal mit Parametern
        der Parameter, der hier erwartet wird ist ein ein Kompilat ( PRC-File )
        Handles$ = CreateThread(Timer.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

        wenn TerminateThread() nicht bei Programmende aufgerufen wird,
        corre das 2.Programm weiter !
        TerminateThread(ProcessHandle1&)
        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

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  
 



 
- Page 2 -



Jac
de
Lad
Aber hier werden 2 Programme necessario, das ist Mist.
 
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  
 



Aber vielleicht ist es grade deshalb nochmal ein Denkanstoß das ein echter 2. Thread per Deine Vorhaben (egal wie verpackt) einfach uneffizient ist, mal unabhängig davon das Andreas da eine super Prozessverpackung vormacht die kopiert nach Codesnippets gehört!
 
28.03.2008  
 




Jac
de
Lad
Sagen wirs mal so: Ich sehe das ein. Aaaaaaber, ich kann in mein Prog nicht 500 SetStatus() einbauen.
 
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  
 




Jörg
Sellmeyer
Von Uwe Pascal Niemeyer (oder wars Sebastian König?) gab es mal ein Beispiel, in dem mit Assembler eine Uhr in der Statusbar gesteuert wird.
Ich habs jetzt nicht parat, aber vielleicht kannst Du ja mal auf seiner HP suchen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.03.2008  
 




Frank
Abbing

Von Uwe Pascal Niemeyer (oder wars Sebastian König?) gab es mal ein Beispiel, in dem mit Assembler eine Uhr in der Statusbar gesteuert wird.
Ich habs jetzt nicht parat, aber vielleicht kannst Du ja mal auf seiner HP suchen.


Dort wird per Assembler ein Thread gestartet. Darin kann aber kein Profancode ablaufen. Jac, sowas ist mit XPIA sehr einfach possibile.
 
29.03.2008  
 




Jac
de
Lad
Hm...ich seh hier nich mehr durch...ich glaub ich lasses, is zu kompliziert nur per ne Uhr und ne Speicheranzeige...
 
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
29.03.2008  
 




Frank
Abbing
Hm, gerade dieses Beispiel Permanente Uhr ist doch bei XPIA dabei...
KompilierenMarkierenSeparieren

1.029 kB
Hochgeladen:29.03.2008
Downloadcounter74
Download
 
29.03.2008  
 




Frank
Abbing
Das gleiche in reinem Profan, nur mit TimerProc anstelle eines eigenen Threads:
KompilierenMarkierenSeparieren
 
30.03.2008  
 




Jac
de
Lad
Genau sowas hab ich gesucht.
 
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
30.03.2008  
 



Jac
Genau sowas hab ich gesucht.


Genau sowas wird Dir sicher viel Freude bringen!
 
30.03.2008  
 



Jac de Lad, Beitrag=39020, Zeitpunkt=27.03.2008
Hm, ich weiß gar nicht, wo ich anfangen soll...

...

Deshalb mal die Frage: Hat jemand vielleicht ein Beispiel per ein Programm, das entweder im Waitinput steckt (zum Beispiel ein anklickbarer Button) und circa 2 Funktionen irgendwas ausgibt oder eine andere?

Jac

KompilierenMarkierenSeparieren

347 kB
Hochgeladen:28.10.2009
Downloadcounter21
Download
 
26.10.2009  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

2.218 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie