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
MapleCreateContinuationTask - 継続タスクの作成
使い方
MapleCreateContinuationTask(kv, int (M_DECL *TaskFunction)( void *, int , void * ), void *self, void (M_DECL *MarkTaskFunction)( void * ) )
パラメータ
kv
-
MKernelVector 型のカーネルハンドル
TaskFunction
継続タスクとして実行するための関数へのポインタ
self
継続タスクへ渡される引数
MarkTaskFunction
ガーベージコレクションが発生したときに呼び出される関数
モデルの説明
MapleCreateContinuationTask は現在実行中のタスクの継続タスクを作成します。継続タスクの作成後、MapleStartChildTask を呼び出すことにより、子タスクを開始することが可能です。
外部呼び出しで Task Programming Model を使用する前に、まず Maple におけるタスクプログラミングを十分に理解する必要があります。外部呼び出しインターフェイスはさらに複雑であるため、先に基本となるモデルを理解しておけば、外部呼び出し インターフェイスを理解しやすくなります。
外部呼び出しにおいて、タスクは 関数とデータ要素です。タスク関数は次の原型に合致している必要があります。
int (M_DECL *TaskFunction)( void *parent, int arg_number, void *self )
self パラメータは実行対象タスクの入力データです。parent パラメータはそのタスクの親タスクの入力データです。タスクが親タスクに値を渡そうとする場合、親タスクの入力データを更新するのは子タスクの役割です。arg_number パラメータの値は、現在のタスクが作成された時点で MapleStartChildTask の arg_number パラメータに与えられる値、あるいは、タスクが ルートタスクの場合は既定値 MAPLE_ROOT_TASK です。
以下に例を示します:
#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 のヘルプページを参照してください。
TaskFunction, self および MarkTaskFunction がすべて NULL の場合、継続タスクは作成されますが、実行時にどのユーザーコードも実行しません。
詳細な例については OpenMaple/C/TaskProgramming のページを参照してください。
関連項目
CustomWrapper, define_external, OpenMaple, OpenMaple/C/API, OpenMaple/C/Examples, OpenMaple/C/MapleStartChildTask, OpenMaple/C/MapleStartRootTask, OpenMaple/C/MapleTaskReturn
Download Help Document