Threads[Task][Start] - 新しいタスクを起動
|
使い方
|
|
Start(fcn, arg1, ..., argN)
|
|
パラメータ
|
|
fcn
|
-
|
(appliable) タスクで実行する関数
|
args1..argsN
|
-
|
(anything) fcn の引数、または子タスクの仕様
|
|
|
|
|
説明
|
|
•
|
Start 関数は、タスクモデルを新規に起動します。Start はルートタスクを作成し、タスクが全て終了するか Return 関数が呼ばれることにより現在の呼び出しが終了するまで、順次タスクを実行します。Start の戻り値は、最終タスクの戻り値か、Return に渡される値です。
|
•
|
子タスクが指定されていない場合、Start は fnc( args11...argsN ) を評価する単一のタスクを生成します。
|
•
|
子タスクが指定されている場合、Start は各々の子に対してひとつのタスクと、fnc を継続関数とした継続タスクを生成します。fnc の値は、プロシージャまたは定義済みの継続関数の名前。
|
•
|
2 つの定義済みの継続関数は passed および null。
|
|
Task = [ cfcn, carg1 ... cargn ]
|
|
Tasks = [ cfcn, [c1args] ... [cnargs] ]
|
|
次の形式の Task 引数が複数与えられているように振舞います。
|
|
Task = [ cfcn, c1args ], Task = [ cfcn, c2args ], ... Task = [ cfcn, cnargs ]
|
|
従って、次の各コマンドを実行するタスクを生成します。
|
|
cfcn( c1args ), cfcn( c2args ) ... cfcn( cnargs )
|
•
|
子タスクの戻り値は、継続関数の引数列内のその子の位置より継続関数に渡されます。
|
•
|
上記以外の形式の引数は、対応する位置の引数として継続関数 fcn に渡されます。
|
•
|
Start へのコールに伴い子タスクが生成される場合は、その子タスクが全て終了するまで継続タスクは実行を開始しません。
|
|
|
互換性
|
|
•
|
Threads[Task][Start] コマンドは Maple 15 で更新されました。
|
|
|
例
|
|
>
|
with(Threads[Task]);
cont := proc( a, b )
return a + b;
end proc;
|
| (5.1) |
>
|
task := proc( i, j )
local k;
if ( j-i < 1000 ) then
return add( k, k=i..j );
else
k := floor( (j-i)/2 )+i;
Continue( cont, Task=[ task, i, k ], Task=[ task, k+1, j ] );
end if;
end proc;
|
| (5.2) |
>
|
Start( task, 1, 10^7 );
|
| (5.3) |
>
|
Start( cont, Task=[task, 1, 5*10^6], Task=[task, 5*10^6+1, 10^7] );
|
| (5.4) |
>
|
Start( cont, Tasks=[task, [1, 5*10^6], [5*10^6+1, 10^7] ] );
|
| (5.5) |
| (5.6) |
|
|