4D v15 R5 introduce un nuovo modo, semplice e potente, di scambiare informazioni tra processi e anche tra processi e moduli. Questa funzione si basa su un sistema di messaggistica asincrona che consente di chiamare processi e moduli e di chiedere loro di eseguire metodi con parametri nel proprio contesto.
Il processo worker
Un worker ha una casella per i messaggi. Il processo worker viene creato al primo utilizzo e anche il processo associato viene lanciato automaticamente al primo utilizzo. A differenza del comando “New process“, un processo worker rimane in vita al termine dell’esecuzione del metodo.
Un worker può chiamarsi da solo per lavorare su lavori di grandi dimensioni in pezzi. I worker ridurranno drasticamente la necessità di variabili interprocesso e la necessità di semafori per consentire l’elaborazione parallela asincrona. Per il multi-threading preemptive è necessario un worker. Tuttavia, un worker può essere usato con processi cooperativi, quindi è utile anche in ambienti a 32 bit o interpretati.
Sono disponibili due nuovi comandi:
- “CALL WORKER” incapsula il nome del metodo del progetto e gli eventuali parametri in un messaggio e lo pubblica nella casella dei messaggi del lavoratore.
CALL WORKER (nome del processo|numero del processo;nome del metodo del progetto;param1;…;paramN)
- “KILL WORKER” invia un messaggio al worker specificato chiedendogli di dimenticare qualsiasi messaggio in sospeso e di uccidersi.
KILL WORKER (nulla|nome processo|numero processo)
È disponibile un database di esempio per dimostrare la nuova funzionalità:
Modulo di chiamata
Ora, ogni modulo in esecuzione in una finestra ha una casella di messaggio. “CALL FORM” consente di eseguire un metodo di progetto con argomenti nel contesto di un modulo visualizzato in una finestra, indipendentemente dal processo che possiede la finestra.
Il comando permette di utilizzare “CALL PROCESS” insieme alle variabili interprocesso per passare i messaggi. “CALL FORM” può essere utilizzato all’interno del contesto di un modulo per richiamare se stesso al fine di impilare o troncare il lavoro. In questo modo si elimina la necessità di ricorrere a soluzioni come SET TIMER(1). Sebbene sia estremamente necessario per i processi preemptive, funziona anche con processi cooperativi, con ambienti a 32 bit o interpretati.
La sintassi è:
CALL FORM (riferimento alla finestra;nome del metodo di progetto;param1;…;paramN)
Analogamente a “CALL WORKER“, “CALL FORM” incapsula il nome del metodo e gli argomenti del comando in un messaggio che viene pubblicato nella casella dei messaggi del modulo. Il modulo esegue quindi il messaggio nel proprio processo.
È disponibile un database di esempio per dimostrare la nuova funzionalità:
Per maggiori dettagli, consultare il manuale di aggiornamento di 4D v15 R5.