Maple Professionel
Maple Académique
Maple Edition Étudiant
Maple Personal Edition
Maple Player
Maple Player for iPad
MapleSim Professionel
MapleSim Académique
Maple T.A. - Suite d'examens de classement
Maple T.A. MAA Placement Test Suite
Möbius - Didacticiels de mathématiques en ligne
Machine Design / Industrial Automation
Aéronautique
Ingénierie des véhicules
Robotics
Energie
System Simulation and Analysis
Model development for HIL
Modélisation du procédé pour la conception de systèmes de contrôle
Robotics/Motion Control/Mechatronics
Other Application Areas
Enseignement des mathématiques
Enseignement de l’ingénierie
Enseignement secondaire et supérieur (CPGE, BTS)
Tests et évaluations
Etudiants
Modélisation financière
Recherche opérationnelle
Calcul haute performance
Physique
Webinaires en direct
Webinaires enregistrés
Agenda des évènements
Forum MaplePrimes
Blog Maplesoft
Membres Maplesoft
Maple Ambassador Program
MapleCloud
Livres blancs techniques
Bulletin électronique
Livres Maple
Math Matters
Portail des applications
Galerie de modèles MapleSim
Cas d'Etudes Utilisateur
Exploring Engineering Fundamentals
Concepts d’enseignement avec Maple
Centre d’accueil utilisateur Maplesoft
Centre de ressources pour enseignants
Centre d’assistance aux étudiants
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