Maple Professional
Maple Academic
Maple Student Edition
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professional
MapleSim Academic
Maple T.A. - Testing & Assessment
Maple T.A. MAA Placement Test Suite
Möbius - Online Courseware
Machine Design / Industrial Automation
Aerospace
Vehicle Engineering
Robotics
Power Industries
System Simulation and Analysis
Model development for HIL
Plant Modeling for Control Design
Robotics/Motion Control/Mechatronics
Other Application Areas
Mathematics Education
Engineering Education
High Schools & Two-Year Colleges
Testing & Assessment
Students
Financial Modeling
Operations Research
High Performance Computing
Physics
Live Webinars
Recorded Webinars
Upcoming Events
MaplePrimes
Maplesoft Blog
Maplesoft Membership
Maple Ambassador Program
MapleCloud
Technical Whitepapers
E-Mail Newsletters
Maple Books
Math Matters
Application Center
MapleSim Model Gallery
User Case Studies
Exploring Engineering Fundamentals
Teaching Concepts with Maple
Maplesoft Welcome Center
Teacher Resource Center
Student Help Center
MapleStartChildTask - 子タスクの開始
使い方
MapleStartChildTask(kv, int arg_number, int (M_DECL *TaskFunction)( void *, int , void * ), void *self, void (M_DECL *MarkTaskFunction)( void * ) )
パラメータ
kv
-
MKernelVector 型のカーネルハンドル
arg_number
タスクの実行時に子タスクに渡される正の整数
TaskFunction
継続タスクとして実行するための関数へのポインタ
self
継続タスクへ渡される引数
MarkTaskFunction
ガーベージコレクションが発生したときに呼び出される関数
モデルの説明
MapleStartChildTask は現在実行中のタスクの子タスクを作成します。このタスクは MapleStartChildTask により返されると同時に実行可能となります。この関数の呼び出しは、必ず、MapleCreateContinuationTask を呼び出して、継続タスクを作成してから実行します。
外部呼び出しで Task Programming Model を使用する前に、まず Maple におけるタスクプログラミングを十分に理解する必要があります。外部呼び出しインターフェイスはさらに複雑であるため、先に基本となるモデルを理解しておけば、外部呼び出し インターフェイスを理解しやすくなります。
外部呼び出しにおいて、タスクは 関数とデータ要素です。タスク関数は次の原型に合致している必要があります。
int (M_DECL *TaskFunction)( void *parent, int arg_number, void *self )
self パラメータはタスクに合致する入力データです。parent パラメータはそのタスクの親タスクに合致する入力データです。タスクが親タスクに値を渡そうとする場合、親タスクの入力データを更新するのは子タスクの役割です。arg_number パラメータは子タスクが作成された時点で指定され、このパラメータにより、子タスクが親の入力データを更新する際に子タスクを差別化することができます。
以下に例を示します:
#include "maplec.h"
struct TaskStruct {
M_INT myData;
M_INT parentLeft;
M_INT parentRight;
};
int M_DECL TaskFunction( void *parent, int arg_number, void *self )
{
struct TaskStruct *myArgs;
M_INT ret;
myArgs = (struct TaskStruct*)self;
ret = DoWork( myArgs );
switch( arg_number )
case MAPLE_ROOT_TASK:
(int)parent = ret; / Root task /
break;
case 1:
((struct TaskStruct*)parent)->parentLeft = ret;
case 2:
((struct TaskStruct*)parent)->parentRight = ret;
}
return 1;
したがって、(子タスクの実行後に)親タスクが実行されるとき、親タスクの入力データは子タスクにより更新されています。
タスク関数は int を返しますが、現在この値は使用されていません。
継続タスクの作成後、MapleStartChildTask 関数を呼び出すことにより子タスクを開始することができます。
MarkTaskFunction 関数は、ガーベージコレクションが発生し、継続タスクが引き続き有効な場合に呼び出されます。MarkTaskFunction に渡される引数は self として渡される値です 。これにより、プログラマはタスク内に Maple データ構造を維持し、ガーベージコレクションの発生時に構造にマーキングしておくことができます。マーキングの詳細は MapleGcMark のヘルプページを参照してください。
詳細な例については OpenMaple/C/TaskProgramming のページを参照してください。
関連項目
CustomWrapper, define_external, OpenMaple, OpenMaple/C/API, OpenMaple/C/Examples, OpenMaple/C/MapleCreateContinuationTask, OpenMaple/C/MapleStartRootTask, OpenMaple/C/MapleTaskReturn
Download Help Document