|  |  | 
|  | 
|  | 
|  funkheld
 | | Hallo, guten Tag. 
 Wie kann man bitte eine nProc im Process zum laufen bringen ?
 
 Wenn ich dies unten reinsetze kommt die Meldung : Variable nicht deklariert
 
 nProc teste
 endproc
 
 GRuss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Ich schätze, dass das garnicht gehen dürfte - 
 jedenfalls nicht ohne nachträgliches Anpassen der ENH-Datei.
 
 Roland springt vermutlich gleich in die benannte Proc bei der Funktion "process", somit der notwendige Overhead für den nProc-ASM aber garnicht durchgeführt wird.
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Ja danke für die Antwort. 
 Vielleicht nimmt Roland  mal eine Anpassung vor?
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 |  | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Viel einfacher für diesen Zweck nicht "process" verwenden sondern "shell" mit Kommandozeilenparameter - schon kannst Du nProcs nutzen. 
 
 [OFFTOPIC]PS: Kannst Beiträge auch löschen:  [/OFFTOPIC] | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Danke. 
 Bitte mal ein kleines Beispiel mit Shell den Process  Daten hinschieben und zurückholen.
 
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  | | Einfach mit FileMap Daten schicken, 
 Prozess starten mit shell meine.exe -p2
 
 Im Programm gleich zu Beginn: case par$... = "-p2" : dieseProc
 
 In dieseProc sind nProcs möglich.
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Hmmm..danke. 
 Zeig mir das bitte einmal kurz auf , was da im Programm passiert mit einem Beispiel.
 So ganz habe ich das nicht begriffen.
 
 Danke.
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 | 
|  | 
|  Michael
 W.
 | | Shell sagt ja, dass das aufrufende Programm weiter läuft. Also sind die Prozesse in Wirklichkeit einfache Programme die zusammen mit dem Hauptprogramm gestartet werden. 
 (Das impliziert übrigens, das die Prozess-Datei als EXE vorliegen sollte. Wenn's schnell gehen soll ist das ja eh' nichts für den Interpreter.)
 
 das Hauptprogramm (nur ein Schema; nicht lauffähig)
 
 ' Hauptprogramm
 
 Declare hFileMap&
 Declare Austauschpuffer#
 Dim Austauschpuffer#, 1000
 
 ' der Tauschpuffer wird unter dem Namen "Tauscher" schon vor den Prozessen angelegt.
 hFileMap& = Create("FileMap", "Tauscher", 1000)
 ' Austauschdatei mit Puffer verbinden
 Austauschpuffer# = FileMap("Map", hFileMap&)
 ' Daten hinein
 String Austauschpuffer#,0 = "Init"
 ' und zu
 FileMap("Close", hFileMap&)
 
 
 ' Dann werden Prozesse gestartet, die auch nProcs beinhalten können
 Shell "prozesse.exe  -p1"
 'Shell "prozesse.exe  -p2 -p3"
 
 ' dann wird eine Schleife aufgebaut und darin das Senden und Empfangen gesteuert.
 Cls
 
 
 While 1
 Case Abbruchkriterium% : BREAK
 If DatenEmpfangen%
 hFileMap& = FileMap("Open", "Tauscher")
 Austauschpuffer# = FileMap("Map", hFileMap&)
 Print "Empfang: "; String$(Austauschpuffer#,0)
 FileMap("Close", hFileMap&)
 EndIf
 If DatenSenden%
 hFileMap& = FileMap("Open", "Tauscher")
 Austauschpuffer# = FileMap("Map", hFileMap&)
 String Austauschpuffer#,0 = "Init"
 FileMap("Close", hFileMap&)
 EndIf
 EndWhile
 Dispose Austauschpuffer#
 End
und der Code für Prozesse.exe (nur ein Schema; nicht lauffähig)
 
 ' prozesse
 
 ' die Parameter verarbeiten
 Declare p$, p1%, p2%, p3%
 p1% = 0
 p2% = 0
 p3% = 0
 WhileLoop 0, %ParCount
 p$ = Par$(&Loop)
 Case Upper(p$) = "-P1" : p1% = 1
 Case Upper(p$) = "-P2" : p2% = 1
 Case Upper(p$) = "-P3" : p3% = 1
 EndWhile
 
 ' ........Beispiel nur mit einem Prozess........
 
 ' einen Puffer aufbauen
 Declare hFM&
 Declare Puffer#
 Dim Puffer#, 1000
 
 Declare Daten$
 
 hFM& = FileMap("Open", "Tauscher")
 Puffer# = FileMap("Map", hFM&)
 // While 1
 //    If Abbruchkriterium% : BREAK
 //    ' Daten aufnehmen
 //    String Puffer#,0 = nProc1() 'Daten zum Senden
 // EndWhile
 
 If p1%
 Daten$ = nProc1()
 ElseIf p2%
 Daten$ = nProc2()
 ElseIf p3%
 Daten$ = nProc3()
 Else
 Daten$ = "Wenn Du keinen Prozess angibst, bekommst' auch keine Daten."
 EndProc
 String Puffer#,0 = Daten$   ' Daten zum Senden
 FileMap("Close", hFM&)
 
 nProc proz1
 ' ...
 EndProc
 
 nProc proz2
 ' ...
 EndProc
 
 nProc proz3
 ' ...
 EndProc
 
 Dispose Puffer#
 End
Die Prozesse sollten dann vom Hauptprogramm eine Info bekommen, wann Sie sich beenden dürfen. Hier kann man dann auch mit mehreren FileMap-Dateien arbeiten.
 
 So kann das Programm jedem einzelnen Prozess Daten senden und auch jeder Prozess an das Hauptprogramm.
 
 Oder die Prozesse nutzen ein Unterprogramm, das die vom Hauptprogramm empfangenen Daten auswertet und an den richtigen Prozess leitet und auch die Daten von den Prozessen sammelt und an das Hauptprogramm gibt.
 
 Hier hat man dann eine Protokoll-Übertragung.
 Der Datenstrom sieht dann etwa so aus:
 
 
 AN P1: Daten....AN P2: ABBRUCH
 AN P3: WAIT 5000
 VON P1: daten.....
 
 So kann dann recht einfach alles schnelle in die nProcs und der Rest landet in normalem XProfan-Code.
 | 
 | 
|  | 
|  | | System: Windows 8/10, XProfan X4Programmieren, das spannendste Detektivspiel der Welt.
 | 24.04.2016  ▲ | 
 | 
|  | 
| 
 
 
 | 
|  | 
|  funkheld
 | | Hallo, vielen dank für die Hilfe. Jetzt habe ich es begriffen.
 
 Ich dachte es war ein Process der so zb aufgerufen werden muss.
 
 pExec("|Prozess", "A", 100, 100, rgb(rnd(256),rnd(256),rnd(256)),   1, h&[0])
 
 Danke.
 Gruss
 | 
 | 
|  | 
|  |  | 
|  | 
| 
 
 
 |