Español
Foro

Rückgabecode de uno Pexec aufgerufenen Procedure

 

Bernd
Lies
¡Hola.

Leider plagt mich otra vez una Problema.
In una Hauptprogramm starte Yo por Pexec una parallel para Hauptprogramm laufende Procedure. Irgendwann es esta Procedure final y son una Meldung por MessageBox de.
¿Cómo se puede Yo ahora en el Hauptprogramm abfragen, si el Procedure final es. Der Grund: lo necesario todavía weitere Aktivitäten, bezogen en el Ergebnisse el Procedure, en el Hauptprogramm tener lugar.

Gibt lo el Möglichkeit una Parámetro como Rückgabecode de el aufgerufenen Procedure a bekommen?

Wär toll si me alguien seine Ayuda anbieten sería.
 
XProfan X2
xprofan 9.0, windows xp pro
18.06.2014  
 




H.Brill
Brauchst du sólo en el Ayuda en pExec()
a schauen.
Natürlich mußt du el Prozess-ID (PID) haben.
El bekommst du, si du pExec() una Valor
zurückgeben läßt :
KompilierenMarcaSeparación
pid& = pExec(....)

if getExitCode(pid <> 259)

    print "läuft nicht mehr!     "

End

Wenn du getExitCode() en deiner Hauptprogrammschleife
permanent abfragst, debería lo ir.

Wenn du de lo que el Proc zurückgeben willst, kannst
Si es usted el encima FileMap lösen. Noch una einfache Möglichkeit
wäre el Clipboard.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
18.06.2014  
 




Bernd
Lies
¡Hola H.Brill,

vielen Dank para Su Antwort. Yo voluntad Su Angaben austesten. Werde dazu aber sólo en el nächsten Tagen kommen. Selbstverständlich voluntad Yo encima el Ergebnis informieren.
 
XProfan X2
xprofan 9.0, windows xp pro
18.06.2014  
 




Bernd
Lies
¡Hola H. Brill,

hier mein Ergebnis: Que el Prozess-ID ha no geklappt, aber dafür el Versión con el Clipboard. Somit es mein Problema gelöst.
Vielen Dank para el Ayuda.
 
XProfan X2
xprofan 9.0, windows xp pro
19.06.2014  
 




H.Brill
Naja, kommt bastante en él a, qué du hacer willst.
Evtl. necesidad du auch el Clipboard nada.

Anbei veces una Ejemplo, como una Prozess por Übergabe
uno Handle, una Gridbox füllt.

Dabei se auch el Prozess - ID abgefragt.
KompilierenMarcaSeparación
Declare runp&, btn1&, btn2&, btn3&, btn4&, st&, lb&, pid&
Declare Memory b
Dim b, 4
Long b, 0 = 200
runp& = 0
WindowStyle 512 + 2 + 8
WindowTitle "Mein Fenster"
Window 600, 400
btn1&  = @Create("Button", %HWnd, "Start", 10,  10, 60, 25)
btn2&  = @Create("Button", %HWnd, "Stop",  100, 10, 60, 25)
btn3&  = @Create("Button", %HWnd, "Clear", 190, 10, 60, 25)
btn4&  = @Create("Button", %HWnd, "Ende",  280, 10, 60, 25)
lb&    = @Create("Gridbox",%HWnd, "Spalte 1;0;120;Spalte 2;0;120;Spalte 3;0;120", 0, 10, 50, 400, 150)
st&    = @Create("StatusWindow", %HWnd, "", 3, b)
pid& = pExec("|RunProzess", %HWnd, lb&)

If pid& <> 0

    runp& = 1
    EnableWindow btn1&, 0
    SetText st&, 0, "Prozess läuft !"

EndIf

WhileNot @Clicked(btn4&)

    WaitInput

    If @Clicked(btn1&)

        If runp& = 0

            runp& = 1
            pid& = pExec("|RunProzess", %HWnd, lb&)
            SetText st&, 0, "Prozess läuft  !"
            EnableWindow btn1&, 0

        Else

            MessageBox("Prozess läuft bereits !", "Info", 0)

        EndIf

    ElseIf @Clicked(btn2&)

        If runp& = 1

            Process("Kill", pid&, 0)
            EnableWindow btn1&, 1
            runp& = 0
            SetText st&, 0, "Prozess beendet !"

        Else

            MessageBox("Prozess läuft nicht !", "Info", 0)

        EndIf

    ElseIf @Clicked(btn3&)

        ClearList lb&

    EndIf

    Case %Key = 2 : Break

    If getExitCode(pid&) <> 259

        SetText st&, 0, "Prozess läuft nicht mehr !"

    EndIf

EndWhile

Dispose b
End

Proc RunProzess

    Parameters win&, dlgwin&
    Declare ende%
    Clear ende%

    WhileNot ende%

        Randomize
        AddString(dlgwin&, Str$(Rnd(100)) + "|" + Str$(Rnd(1000)) + "|" + Str$(Rnd(10000)) )
        Sleep 2000
        case getText$(win&) = "" : ende% = 1

    ENDPROC

 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
19.06.2014  
 




Bernd
Lies
Su Ejemplo Yo verstanden y getestet y mi Codesammlung movido . Mein Problema war, el en el Process una Tiempo abläuft, el irgend wann entonces en 0 va. Wenn dieser Fall eintritt, musste Yo el en el Hptprg. wissen. Also simplemente una Flag en el Cipboard gesetzt y luego en el Hptprg abgefragt.
 
XProfan X2
xprofan 9.0, windows xp pro
19.06.2014  
 




Nico
Madysa
Nette Sache, aber qué es, si la Anwender en el Zwischenzeit el Zwischenablage incluso benutzt?

Meiner Einsicht después de wäre lo sinnvoller, entweder
a) una Filemap utilizarse (el XProfan-Ayuda weiß mehr) oder
b) simplemente vom Unterprozess una Message a el Oberprozess a senden.

Was hier el einfachere Möglichkeit es debería uno simplemente veces ausprobieren.
 
20.06.2014  
 




H.Brill
a a)
Was es, si una más Programa se ejecuta y
dieses el gleichen Namen el Filemap benutzt ?
Nr. b) finde Yo entonces al sinnvollsten.

Oder oben como en mi Code a el Handle
uno Controls en el Hauptprogramm senden.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
20.06.2014  
 




H.Brill
Tal vez läßt se con el qué anfangen.
Wenn dein Prozess no demasiado tiempo dauert :
KompilierenMarcaSeparación
 $H Windows.ph
Declare runp&, btn1&, btn2&, btn3&, btn4&, st&, lb&, pid&
Declare Memory b
Declare Grid&
Dim b, 4
Long b, 0 = 200
runp& = 0
WindowStyle 512 + 2 + 8
WindowTitle "Mein Fenster"
Window 600, 400
btn1&  = @Create("Button", %HWnd, "Start", 10,  10, 60, 25)
btn2&  = @Create("Button", %HWnd, "Stop",  100, 10, 60, 25)
btn3&  = @Create("Button", %HWnd, "Clear", 190, 10, 60, 25)
btn4&  = @Create("Button", %HWnd, "Ende",  280, 10, 60, 25)
lb&    = @Create("Gridbox",%HWnd, "Spalte 1;0;120;Spalte 2;0;120;Spalte 3;0;120", 0, 10, 50, 400, 150)
st&    = @Create("StatusWindow", %HWnd, "", 3, b)
Grid&  = @Create("Grid", 1, 0)
pid& = pExec("|RunProzess", %HWnd, lb&, Grid&)

If pid& <> 0

    runp& = 1
    EnableWindow btn1&, 0
    SetText st&, 0, "Prozess läuft !"

EndIf

WhileNot @Clicked(btn4&)

    WaitInput

    If @Clicked(btn1&)

        If runp& = 0

            runp& = 1
            pid& = pExec("|RunProzess", %HWnd, lb&, Grid&)
            SetText st&, 0, "Prozess läuft  !"
            EnableWindow btn1&, 0

        Else

            MessageBox("Prozess läuft bereits !", "Info", 0)

        EndIf

    ElseIf @Clicked(btn2&)

        If runp& = 1

            Process("Kill", pid&, 1000)
            EnableWindow btn1&, 1
            runp& = 0
            SetText st&, 0, "Prozess beendet !"

        Else

            MessageBox("Prozess läuft nicht !", "Info", 0)

        EndIf

    ElseIf @Clicked(btn3&)

        ClearList lb&

    EndIf

    Case %Key = 2 : Break

    If getExitCode(pid&) = 1000

        SetText st&, 0, "Prozess läuft nicht mehr !"
        Messagebox(GetString$(Grid&, 0), "", 0)

    EndIf

EndWhile

Dispose b
End

Proc RunProzess

    Parameters win&, dlgwin&,  g&
    Declare ende%
    Clear ende%
    ClearList g&

    WhileNot ende%

        Randomize
        AddString(dlgwin&, Str$(Rnd(100)) + "|" + Str$(Rnd(1000)) + "|" + Str$(Rnd(10000)) )
        AddString(g&, "Astalavista !!!")
        Sleep 2000
        case getText$(win&) = "" : ende% = 1

    EndWhile

ENDPROC


Zu überlegen wäre auch, si uno Platz ha :
Man erstellt a Programmbegin una Editar campo y
macht lo con ShowWindow unsichtbar. Dessen
Handle übergibt una continuación el Prozess, el entonces
con SetText qué reinschreibt.
Wenn una continuación en el Hauptprogramm el Exitcode
abfragt, podría uno doch con GetText$() el Editar campo
auslesen.

Müßte uno veces ausprobieren.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
20.06.2014  
 




E.T.
H.Brill (20.06.14)

a a)
Was es, si una más Programa se ejecuta y
dieses el gleichen Namen el Filemap benutzt ?
...


hm, como wahrscheinlich es es esta Konstellation
...jaja, sag niemals nie...

Kollisionen podría uno en efecto umgehen, si uno z.B. el Speicherdatei como Name el PID des erzeugenden Programms son (mach Yo así), oder una vom Programa generierten einzigartigen Name, oder, oder...
Gibt lo el Möglichkeiten viele, Yo hatte como todavía nie Problemas...
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
21.06.2014  
 




H.Brill
Weißt du algo mehr encima Filemapping ?
¿Por qué va folgendes Programa sólo una vez
en Programmstart ?
KompilierenMarcaSeparación
Declare runp&, btn1&, btn2&, btn3&, btn4&, st&, pid&
Declare Memory b
Declare m#
Declare hfm&
Dim m#, 1000
Dim b, 4
Long b, 0 = 300
runp& = 0
WindowStyle 512
Window 800, 600
btn1&  = @Create("Button", %HWnd, "Start", 10,  10, 60, 25)
btn2&  = @Create("Button", %HWnd, "Ende",  100, 10, 60, 25)
st&    = @Create("StatusWindow", %HWnd, "", 3, b)
hfm& = @Create("Filemap", "Zahl", 1000)

WhileNot @Clicked(btn2&)

    WaitInput

    If @Clicked(btn1&)

        If runp& = 0

            runp& = 1
            pid& = pExec("|RunProzess", %HWnd)
            SetText st&, 0, "Prozess läuft  !"
            EnableWindow btn1&, 0

        Else

            MessageBox("Prozess läuft bereits !", "Info", 0)

        EndIf

        Case %Key = 2 : Break

    EndIf

    If getExitCode(pid&) <> 259

        SetText st&, 0, "Prozess beendet"
        runp& = 0
        EnableWindow btn1&, 1
        Clear m#
        hfm& = FileMap("Open", "Zahl")
        m# = FileMap("Map", hfm&)
        FileMap("Close", hfm&)
        SetText  st&, 0,  String$(m#, 0)

    EndIf

EndWhile

Dispose b, m#

Proc RunProzess

    Parameters win&
    Declare mf&, ok&, a&, buffer#
    Dim buffer#, 1000
    mf& = FileMap("Open", "Zahl")

    WhileLoop 1, 100

        a& = &LOOP
        case getText$(win&) = "" : Break
        Sleep 10

    EndWhile

    buffer# = FileMap("Map", mf&)
    String buffer#, 0 = Str$(a&) + " Schritte im Prozess verarbeitet !!!"
    Dispose buffer#
    ok& = FileMap("Close", mf&)

End
a> End

Wenn Yo, el Button Start para 2. Tiempo drücke, se nichts
mehr en el Statuszeile adecuado. Auch muß Yo sólo con
ratón la ventana clic (wahrscheinlich por waitinput).

Könnte uno una Clic simulieren ?
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
21.06.2014  
 




E.T.
Hab veces bissel gespielt (ExitCode des aufgerufenen Programms,Statuszeile, Mostrar...)
KompilierenMarcaSeparación
Declare runp&, btn1&, btn2&, btn3&, btn4&, st&, pid&, ec&
Declare b#
Declare m#
Declare hfm&, hfmx&
Dim m#, 1000
Dim b#, 12
Long b#, 0 = 200,500,-1
runp& = 0
WindowStyle 512
Window 800, 600
btn1&  = @Create("Button", %HWnd, "Start", 10,  10, 60, 25)
btn2&  = @Create("Button", %HWnd, "Ende",  100, 10, 60, 25)
st&    = @Create("StatusWindow", %HWnd, "STATUS", 3, b#)
hfm& = @Create("Filemap", "Zahl", 1000)

WhileNot @Clicked(btn2&)

    Waitinput 100

    If @Clicked(btn1&)

        If runp& = 0

            locate 20,0
            print "                                            "
            SetText  st&, 1,  "...warte"
            runp& = 1
            Clear pid&
            '            pid& = pExec("|RunProzess", %HWnd)
             $IFDEF INTERPRETER
            pid& = PExec("|RunProzess")
             $ELSE
            pid& = PExec("|RunProzess")
             $ENDIF
            SetText st&, 0, "Prozess läuft  !"
            EnableWindow btn1&, 0

        Else

            MessageBox("Prozess läuft bereits !", "Info", 0)

        EndIf

        Case %Key = 2 : Break

    EndIf

    If ec& = 777

        SetText st&, 0, "Prozess beendet"
        runp& = 0
        EnableWindow btn1&, 1
        hfmx& = FileMap("Open", "Zahl")

        If hfmx&

            m# = FileMap("Map", hfmx&)
            FileMap("Close", hfmx&)
            locate 20,0
            print STRING$(m#,0)
            SetText  st&, 1,  String$(m#,0)

        Else

            MessageBox("Speicherdatei konnte nicht geöffnet werden!", "MAP-Hinweis", 48)

        EndIf

        Clear ec&, pid&

    EndIf

    ec& = getExitCode(pid&)
    SetText st&, 2, str$(pid&) + ", " + str$(ec&)

EndWhile

Dispose b#, m#

Proc RunProzess

    Parameters win&
    Declare mf&, ok&, a&, buffer#
    Dim buffer#, 1000
    mf& = FileMap("Open", "Zahl")

    WhileLoop 1, 100

        a& = &LOOP
        '        case getText$(win&) = "" : Break ????Nur ein durchlauf !!
        Sleep 10

    EndWhile

    buffer# = FileMap("Map", mf&)
    'String buffer#, 0 = Str$(a&) + " Schritte im Prozess verarbeitet !!!"
    String buffer#, 0 = "Fertig : " + @dt("DateTimeStr", "c", !now)
    Dispose buffer#
    ok& = FileMap("Close", mf&)
    End 777

ENDPROC

End

Bei'm auslesen y Mostrar hast du hfm& (el ID el Mapdatei) überschrieben:
KompilierenMarcaSeparación
hfm& = @Crear("Filemap", "Zahl", 1000)
...
hfm& = FileMap("Open", "Zahl")
...

Habs simplemente veces adaptado, y ya funzt lo siempre y siempre otra vez:
KompilierenMarcaSeparación
...
hfmx& = FileMap("Open", "Zahl")
...

...nebenbei eben veces a la Clic simulado
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
22.06.2014  
 




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

14.291 Views

Untitledvor 0 min.
Rolf Koch26.11.2015
Nico Madysa18.12.2014
Georg Teles14.10.2014
Pedro Miguel04.10.2014
Más...

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