Create - Maple Help

 Create
 evaluate an expression in a new thread

 Calling Sequence Create( expr, opt1, opt2, ... ) Create( expr, var, opt1, opt2, ... )

Parameters

 expr - (anything) the expression to evaluate in the new thread var - (name) (optional) an output variable for the result opt1, opt2, ... - optional arguments

Description

 • The Create command is used to start evaluating a Maple expression in a new thread.  This command returns an integer identifier for the new thread.
 • When the evaluation of expr is finished, the thread terminates.  If var is given, the result of the evaluation is assigned to var.
 • The identifier returned by Create can be passed into Wait.
 • Due to the unique functionality of Create, there are special evaluation rules for expr.  If expr is a procedure, then the arguments to the procedure are evaluated in the current thread, but the function call itself is evaluated in the new thread.  If expr is not a procedure, then it is evaluated entirely in the new thread.
 • One side effect of these rules is that if expr is a function call, with another function call as an argument, the argument will be evaluated in the current thread, not the new thread.
 • There is one optional argument: stacksize
 stacksize = integer

The stacksize optional argument specifies the maximum amount of stack space available to the new thread.  The maximum stack size of a thread is fixed at thread creation time and cannot be changed.  By default the stack size is the minimum allowed stack, which is platform dependent.

Examples

 > $\mathrm{with}\left(\mathrm{Threads}\right)$
 $\left[{\mathrm{Add}}{,}{\mathrm{ConditionVariable}}{,}{\mathrm{Create}}{,}{\mathrm{Map}}{,}{\mathrm{Mul}}{,}{\mathrm{Mutex}}{,}{\mathrm{Self}}{,}{\mathrm{Seq}}{,}{\mathrm{Sleep}}{,}{\mathrm{Task}}{,}{\mathrm{Wait}}\right]$ (1)
 > p := proc( limit )    local start, now;    global i;    start := time[real]();    now := start;    i := now - start;        while i < limit            do        Threads:-Sleep( 0.1 );        now := time[real]();        i := now-start;    end;    return i; end:
 > $i≔0:$
 > $\mathrm{id}≔\mathrm{Create}\left(p\left(1\right)\right)$
 ${\mathrm{id}}{≔}{1}$ (2)
 > $i$
 ${0.}$ (3)
 > $\mathrm{Threads}:-\mathrm{Sleep}\left(0.5\right)$
 > $i$
 ${0.501}$ (4)
 > $\mathrm{Wait}\left(\mathrm{id}\right):$
 > $i$
 ${1.002}$ (5)
 > $\mathrm{id}≔\mathrm{Create}\left(p\left(2\right),'\mathrm{out}'\right)$
 ${\mathrm{id}}{≔}{2}$ (6)
 > $\mathrm{out}$
 ${\mathrm{out}}$ (7)
 > $\mathrm{Wait}\left(\mathrm{id}\right):$
 > $\mathrm{out}$
 ${2.007}$ (8)