| |
|
|
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 X4 Programmieren, 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 |
|
|
| |
|
|