Foro | | | | 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. |
| | | | |
| | 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 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. |
| | | | |
| | 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. |
| | | | |
| | 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ónDeclare 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. |
| | | | |
| | 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. |
| | | | |
| | 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ónDeclare 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ónDeclare 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ónhfm& = @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 ▲ |
| |
|
RespuestaTema opciones | 14.291 Views |
ThemeninformationenDieses Thema ha 4 subscriber: |