4D v16.3

CALL WORKER

Home

 
4D v16.3
CALL WORKER

CALL WORKER 


 

CALL WORKER ( process ; method {; param}{; param2 ; ... ; paramN} ) 
Parameter Type   Description
process  Text, Longint in Name or number of worker process
method  Text in Name of project method to call
param  Expression in Parameter(s) passed to method

The CALL WORKER command creates or calls the worker process whose name or ID you passed in process, and requests the execution of the method in its context with the optional param parameter(s).

The CALL WORKER command encapsulates the param parameters into a message and posts it in the worker's message box. For more information on worker processes, please refer to the About workers section.

In the process parameter, you can specify the worker using its process name or its process number:

  • If you pass the number of a process that does not exist, or if the process specified was not created by CALL WORKER nor by 4D itself (such as the main application process), CALL WORKER does nothing.
  • If you pass the name of a process that does not exist, a new worker process is created.

Notes:

  • Worker process names are case sensitive.
  • The main process, created by 4D when a database is opened for the user interface and the application mode, is a worker process and can be called by CALL WORKER. However, since its name can vary depending on the 4D language, it is preferable to designate this process using its number (always 1) when you use CALL WORKER.

The worker process appears in the list of processes of the Runtime Explorer and is returned by the PROCESS PROPERTIES command when applied to this process.

In method, you pass the name of the project method to execute in the context of the worker process. You can pass an empty string; in this case, the worker executes the method that was originally used to start its process, if any (i.e., the startup method of the worker).

Note: It is not possible to pass an empty string in method when the command calls the main process (process number 1) since it was not started using a project method. As a result, CALL WORKER (1;"") does nothing.

You can also pass parameters to the method using one or more optional param parameters. You pass parameters the same way you would pass them to a subroutine (see the Passing Parameters to Methods section). Upon starting execution in the context of the process, the process method receives the parameter values in $1, $2, and so on. Remember that arrays cannot be passed as parameters to a method. Furthermore, in the context of the CALL WORKER command, the following additional considerations need to be taken into account:

  • Pointers to tables or fields are allowed.
  • Pointers to variables, particularly local and process variables, are not recommended since these variables may be undefined at the moment they are being accessed by the process method.
  • If you pass an Object type parameter, 4D creates a copy of the object in the destination process if the worker is in a process different from the one calling the CALL WORKER command.

A worker process remains alive until the application is closed or the KILL WORKER command is explicitly called for it. To free up memory, do not forget to call this command once a worker process is no longer needed.

Example  

In a form, a button starts a computation: for example, statistics for the selected year. The button creates or calls a worker process that computes the data while the user can continue to work in the form.

The method of the button is:

  //call the worker vWorkerName with the parameter
 C_LONGINT(vYear)
 vYear:=2015 // could have been selected by the user in the form
 CALL WORKER("myWorker";"workerMethod";vYear;Current form window)

The code of workerMethod is:

  // this is the method of the worker
  // it can be preemptive or cooperative
 C_LONGINT($1//gets the year
 C_LONGINT($2//gets the window reference
 C_OBJECT(vStatResults//to store statistical results
 ... //compute statistics
  //once finished, calls the form back with calculated values
  //vStatResults can display results in the form
 CALL FORM($2;"displayStats";vStatResults)



See also 

About workers
CALL FORM
Current process name
KILL WORKER

 
PROPERTIES 

Product: 4D
Theme: Process (Communications)
Number: 1389

This command can be run in preemptive processes

 
HISTORY 

Created: 4D v15 R5

 
ARTICLE USAGE

4D Language Reference ( 4D v16)
4D Language Reference ( 4D v16.1)
4D Language Reference ( 4D v16.2)
4D Language Reference ( 4D v16.3)