Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com

Home

 
4D v20 R7
New process

New process 


 

New process ( Methodenname ; Stapel {; Prozessname {; Param {; Param2 ; ... ; ParamN}}}{; *} ) -> Funktionsergebnis 
Parameter Typ   Beschreibung
Methodenname  String in Zu startende Methode
Stapel  Lange Ganzzahl in Größe des Stapelspeichers in Byte
Prozessname  String in Name des erzeugten Prozesses
Param  Ausdruck in Parameter für die Methode
Operator in Einmaliger Prozess
Funktionsergebnis  Lange Ganzzahl in Prozessnummer des neu erstellten bzw. bereits laufenden Prozesses

Die Funktion New process startet auf demselben Rechner einen neuen Prozess und gibt seine Prozessnummer zurück. Diese Nummer ist zu einem bestimmten Zeitpunkt eindeutig. Ist der Prozess gelöscht, wird die Prozessnummer neu vergeben.

Konnte der Prozess nicht erstellt werden, z.B weil der Speicher dafür nicht ausreicht, gibt New process den Wert Null (0) zurück und es wird ein Fehler generiert. Sie können diesen Fehler über eine Fehlerverwaltungsmethode ausfindig machen, die ON ERR CALL einsetzt.

In Methodenname übergeben Sie den Namen der Methode für den neuen Prozess. Nachdem 4D den Kontext für den neuen Prozess bestimmt hat, beginnt es mit der Ausführung dieser Methode. Sie wird zur Prozessmethode.

Unterstützt der Ausführungskontext den preemptive Modus und ist Methodenname als "thread-safe" deklariert, wird der neue 4D Prozess in einem preemptive Thread ausgeführt, wenn die Anwendung im kompilierten Modus läuft. Weitere Informationen dazu finden Sie auf der Seite Preemptive 4D Prozesse

Im Parameter Stapel können Sie die Größe des Stapelspeichers angeben. Im Stapelspeicher werden Methodenaufrufe, lokale Variablen, Parameter in Unterroutinen und gestapelte Datensatze angehäuft. 

  • Übergeben Sie in Stapel den Wert 0 für eine standardmäßige Stapelgröße, die für die meisten Anwendungen passt (empfohlene Einstellung)
  • In bestimmten Fällen wollen Sie lieber einen eigenen Wert verwenden. Sie müssen ihn in Bytes angeben. Sie sollten mindestens 64.000 Bytes zuweisen. Bei sehr langen, verschachtelten Methoden weisen Sie 512.000 Bytes oder mehr zu. Wenn Sie zuwenig Speicher zuweisen, tritt die Fehlermeldung “Der Stapelspeicher ist voll” auf. Der angegebene Wert muss ein Vielfaches von 2 sein.

Hinweis: Der Stapelspeicher ist NICHT der Gesamtspeicher des Prozesses. Prozesse teilen den Speicher auf zwischen Datensätzen, Interprozessvariablen, usw.. Prozessvariablen werden in einem Extraspeicher gespeichert. Der Stapelspeicher enthält verschiedene 4D Informationen; die Menge an Informationen richtet sich nach der Anzahl der eingebundenen Methodenaufrufe, die der Prozess verwendet, der Anzahl der geöffneten und wieder geschlossenen Formulare, sowie Anzahl und Größe der lokalen Variablen, die in jedem eingebetteten Methodenaufruf verwendet werden.

Den Namen des neuen Prozesses übergeben Sie in Prozessname. Dieser Name erscheint in der Prozessliste des Runtime Explorers. Er wird von dem Befehl _o_PROCESS PROPERTIES zurückgegeben, wenn er auf diesen neuen Prozess angewendet wird. Geben Sie diesen Parameter nicht an, ist Prozessname ein leerer String. Soll der Prozess nur lokal gelten, stellen Sie das Dollarzeichen voran ($).

Wichtig: Beachten Sie, dass lokale Prozesse keinen Zugriff auf Daten im Client/Server-Betrieb haben sollten. Weitere Informationen dazu finden Sie im Abschnitt Globale und lokale Prozesse.

Sie übergeben für die Prozessmethode einen oder mehrere Param Parameter. Sie können die Parameter genauso wie für eine Unterroutine übergeben (siehe Abschnitt ). Sobald die Ausführung im Kontext des neuen Prozesses startet, erhält die Prozessmethode die Parameterwerte in $1, $2, etc.
Beachten Sie, dass Sie Arrays nicht als Parameter in einer Methode übergeben können. Auch beim Übergeben von Ausdrücken mit Zeigern müssen Sie auf zusätzliche Gegebenheiten achten:

  • Zeiger auf Tabellen und Felder sind erlaubt,
  • Zeiger auf Variablen, insbesondere lokale und Prozessvariablen werden nicht empfohlen, da diese Variablen im Moment, wo die Prozessmethode darauf zugreift, undefiniert sein können.
  • Parameter vom Typ Standard-Objekt oder Collection werden per Kopie übergeben, d.h. 4D erstellt keine Referenz, sondern eine Kopie des Objekts oder der Collection im Zielprozess. Wollen Sie ein Objekt oder eine Collection per Referenz übergeben, müssen Sie ein shared object bzw. collection übergeben (siehe Shared Objects und Shared Collections).

Hinweis: Übergeben Sie Parameter in der Prozessmethode, müssen Sie auch Prozessname übergeben. In diesem Fall können Sie ihn nicht weglassen.

Geben Sie diesen Parameter an, erhält 4D die Anweisung, zuerst zu prüfen, ob bereits ein Prozess Prozessname vorhanden ist. Ist dies der Fall, startet 4D keinen neuen Prozess und gibt die Prozessnummer des Prozesses Prozessname zurück.

Wir gehen aus von der Projektmethode:

  ` ADD CUSTOMERS
 SET MENU BAR(1)
 Repeat
    ADD RECORD([Customers];*)
 Until(OK=0)

Fügen Sie diese Projektmethode über den Menüleisteneditor der Designumgebung in einem eigenen Menüeintrag hinzu, für den die Eigenschaft Starte Neuen Prozess aktiviert ist, startet 4D automatisch einen neuen Prozess, der mit dieser Methode läuft. Der Aufruf SET MENU BAR(1) fügt dem neuen Prozess eine Menüleiste hinzu. Ist kein Fenster vorhanden (das sie mit der Funktion Open window öffnen können), öffnet der Aufruf von ADD RECORD automatisch ein Fenster.

Damit Sie den Prozess Add Customers über eine Schaltfläche in einem eigenen Kontrollfeld starten können, schreiben Sie:

  ` Objektmethode für Schaltfläche bAddCustomers
 $vlProcessID:=New process("Add Customers";0;"Kunden hinzufügen")

Die Schaltfläche führt dasselbe aus wie der eigene Menüeintrag.

Wollen Sie beim Auswählen des Menüeintrags oder Anklicken der Schaltfläche den Prozess starten (wenn er nicht vorhanden ist) oder nach vorne bringen (wenn er schon läuft), können Sie die Methode START ADD CUSTOMERS einrichten:

  ` START ADD CUSTOMERS
 $vlProcessID:=New process("Add Customers";0;"Kunden hinzufügen";*)
 If($vlProcessID#0)
    BRING TO FRONT($vlProcessID)
 End if

Die Objektmethode der Schaltfläche bAddCustomers lautet dann:

  ` Objektmethode für Schaltfläche bAddCustomers
 START ADD CUSTOMERS

Im Menüleisteneditor ersetzen Sie die Methode ADD CUSTOMERS durch die Methode START ADD CUSTOMERS und deaktivieren die Eigenschaft Starte Neuen Prozess für den Menüeintrag.



Siehe auch 

Einführung in Prozesse
Execute on server
Preemptive 4D Prozesse

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Prozesse
Nummer: 317

Dieser Befehl kann in preemptive Prozessen laufen

 
SEITENINHALT 
 
GESCHICHTE 

Geändert: 4D 2004.3
Geändert: 4D v16 R4

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v20 R7)